mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
vkd3d-shader/hlsl: Run sm4_generate_vsir_block() recursively.
This allows us to remove the HLSL IR version of an instruction when the vsir version is properly implemented.
This commit is contained in:
parent
64c4a3a442
commit
6eda775047
Notes:
Henri Verbeet
2024-11-05 20:06:02 +01:00
Approved-by: Elizabeth Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1246
@ -7808,6 +7808,7 @@ static bool sm4_generate_vsir_instr_expr(struct hlsl_ctx *ctx,
|
|||||||
static void sm4_generate_vsir_block(struct hlsl_ctx *ctx, struct hlsl_block *block, struct vsir_program *program)
|
static void sm4_generate_vsir_block(struct hlsl_ctx *ctx, struct hlsl_block *block, struct vsir_program *program)
|
||||||
{
|
{
|
||||||
struct hlsl_ir_node *instr, *next;
|
struct hlsl_ir_node *instr, *next;
|
||||||
|
struct hlsl_ir_switch_case *c;
|
||||||
|
|
||||||
LIST_FOR_EACH_ENTRY_SAFE(instr, next, &block->instrs, struct hlsl_ir_node, entry)
|
LIST_FOR_EACH_ENTRY_SAFE(instr, next, &block->instrs, struct hlsl_ir_node, entry)
|
||||||
{
|
{
|
||||||
@ -7834,6 +7835,20 @@ static void sm4_generate_vsir_block(struct hlsl_ctx *ctx, struct hlsl_block *blo
|
|||||||
replace_instr_with_last_vsir_instr(ctx, program, instr);
|
replace_instr_with_last_vsir_instr(ctx, program, instr);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case HLSL_IR_IF:
|
||||||
|
sm4_generate_vsir_block(ctx, &hlsl_ir_if(instr)->then_block, program);
|
||||||
|
sm4_generate_vsir_block(ctx, &hlsl_ir_if(instr)->else_block, program);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HLSL_IR_LOOP:
|
||||||
|
sm4_generate_vsir_block(ctx, &hlsl_ir_loop(instr)->body, program);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HLSL_IR_SWITCH:
|
||||||
|
LIST_FOR_EACH_ENTRY(c, &hlsl_ir_switch(instr)->cases, struct hlsl_ir_switch_case, entry)
|
||||||
|
sm4_generate_vsir_block(ctx, &c->body, program);
|
||||||
|
break;
|
||||||
|
|
||||||
case HLSL_IR_SWIZZLE:
|
case HLSL_IR_SWIZZLE:
|
||||||
generate_vsir_instr_swizzle(ctx, program, hlsl_ir_swizzle(instr));
|
generate_vsir_instr_swizzle(ctx, program, hlsl_ir_swizzle(instr));
|
||||||
replace_instr_with_last_vsir_instr(ctx, program, instr);
|
replace_instr_with_last_vsir_instr(ctx, program, instr);
|
||||||
|
Loading…
Reference in New Issue
Block a user