mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
vkd3d-shader/hlsl: Introduce hlsl_ir_vsir_instruction_ref, again.
This node type will be deleted (again) once the hlsl->vsir->tpf translation is complete. It serves the purpose of allowing to keep both real hlsl_ir_nodes and vsir_instructions in the hlsl_block, until all the former can be translated into the latter.
This commit is contained in:
committed by
Henri Verbeet
parent
cf7fade580
commit
158bf794e6
Notes:
Henri Verbeet
2024-10-24 21:02:04 +02:00
Approved-by: Elizabeth Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1210
@@ -1695,6 +1695,22 @@ struct hlsl_ir_node *hlsl_new_switch(struct hlsl_ctx *ctx, struct hlsl_ir_node *
|
||||
return &s->node;
|
||||
}
|
||||
|
||||
struct hlsl_ir_node *hlsl_new_vsir_instruction_ref(struct hlsl_ctx *ctx, unsigned int vsir_instr_idx,
|
||||
struct hlsl_type *type, const struct hlsl_reg *reg, const struct vkd3d_shader_location *loc)
|
||||
{
|
||||
struct hlsl_ir_vsir_instruction_ref *vsir_instr;
|
||||
|
||||
if (!(vsir_instr = hlsl_alloc(ctx, sizeof(*vsir_instr))))
|
||||
return NULL;
|
||||
init_node(&vsir_instr->node, HLSL_IR_VSIR_INSTRUCTION_REF, type, loc);
|
||||
vsir_instr->vsir_instr_idx = vsir_instr_idx;
|
||||
|
||||
if (reg)
|
||||
vsir_instr->node.reg = *reg;
|
||||
|
||||
return &vsir_instr->node;
|
||||
}
|
||||
|
||||
struct hlsl_ir_load *hlsl_new_load_index(struct hlsl_ctx *ctx, const struct hlsl_deref *deref,
|
||||
struct hlsl_ir_node *idx, const struct vkd3d_shader_location *loc)
|
||||
{
|
||||
@@ -2517,6 +2533,9 @@ static struct hlsl_ir_node *clone_instr(struct hlsl_ctx *ctx,
|
||||
|
||||
case HLSL_IR_STATEBLOCK_CONSTANT:
|
||||
return clone_stateblock_constant(ctx, map, hlsl_ir_stateblock_constant(instr));
|
||||
|
||||
case HLSL_IR_VSIR_INSTRUCTION_REF:
|
||||
vkd3d_unreachable();
|
||||
}
|
||||
|
||||
vkd3d_unreachable();
|
||||
@@ -2938,6 +2957,7 @@ const char *hlsl_node_type_to_string(enum hlsl_ir_node_type type)
|
||||
[HLSL_IR_COMPILE] = "HLSL_IR_COMPILE",
|
||||
[HLSL_IR_SAMPLER_STATE] = "HLSL_IR_SAMPLER_STATE",
|
||||
[HLSL_IR_STATEBLOCK_CONSTANT] = "HLSL_IR_STATEBLOCK_CONSTANT",
|
||||
[HLSL_IR_VSIR_INSTRUCTION_REF] = "HLSL_IR_VSIR_INSTRUCTION_REF",
|
||||
};
|
||||
|
||||
if (type >= ARRAY_SIZE(names))
|
||||
@@ -3531,6 +3551,11 @@ static void dump_instr(struct hlsl_ctx *ctx, struct vkd3d_string_buffer *buffer,
|
||||
case HLSL_IR_STATEBLOCK_CONSTANT:
|
||||
dump_ir_stateblock_constant(buffer, hlsl_ir_stateblock_constant(instr));
|
||||
break;
|
||||
|
||||
case HLSL_IR_VSIR_INSTRUCTION_REF:
|
||||
vkd3d_string_buffer_printf(buffer, "vsir_program instruction %u",
|
||||
hlsl_ir_vsir_instruction_ref(instr)->vsir_instr_idx);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3839,6 +3864,10 @@ void hlsl_free_instr(struct hlsl_ir_node *node)
|
||||
case HLSL_IR_STATEBLOCK_CONSTANT:
|
||||
free_ir_stateblock_constant(hlsl_ir_stateblock_constant(node));
|
||||
break;
|
||||
|
||||
case HLSL_IR_VSIR_INSTRUCTION_REF:
|
||||
vkd3d_free(hlsl_ir_vsir_instruction_ref(node));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user