From 847c008b4988999ef8d788b518eac393281d0335 Mon Sep 17 00:00:00 2001 From: Elizabeth Figura Date: Tue, 27 May 2025 21:15:13 -0500 Subject: [PATCH] vkd3d-shader/ir: Split TEX into two separate vsir opcodes. The two have the same d3dbc opcode, but have different names and different semantics. --- libs/vkd3d-shader/d3d_asm.c | 5 +++-- libs/vkd3d-shader/d3dbc.c | 6 +++--- libs/vkd3d-shader/hlsl_codegen.c | 6 +++--- libs/vkd3d-shader/ir.c | 8 ++++---- libs/vkd3d-shader/vkd3d_shader_main.c | 3 ++- libs/vkd3d-shader/vkd3d_shader_private.h | 1 + 6 files changed, 16 insertions(+), 13 deletions(-) diff --git a/libs/vkd3d-shader/d3d_asm.c b/libs/vkd3d-shader/d3d_asm.c index 946177fc0..db60883f2 100644 --- a/libs/vkd3d-shader/d3d_asm.c +++ b/libs/vkd3d-shader/d3d_asm.c @@ -298,7 +298,7 @@ static const char * const shader_opcode_names[] = [VKD3DSIH_SWITCH_MONOLITHIC ] = "switch", [VKD3DSIH_SYNC ] = "sync", [VKD3DSIH_TAN ] = "tan", - [VKD3DSIH_TEX ] = "texld", + [VKD3DSIH_TEX ] = "tex", [VKD3DSIH_TEXBEM ] = "texbem", [VKD3DSIH_TEXBEML ] = "texbeml", [VKD3DSIH_TEXCOORD ] = "texcoord", @@ -307,6 +307,7 @@ static const char * const shader_opcode_names[] = [VKD3DSIH_TEXDP3 ] = "texdp3", [VKD3DSIH_TEXDP3TEX ] = "texdp3tex", [VKD3DSIH_TEXKILL ] = "texkill", + [VKD3DSIH_TEXLD ] = "texld", [VKD3DSIH_TEXLDD ] = "texldd", [VKD3DSIH_TEXLDL ] = "texldl", [VKD3DSIH_TEXM3x2DEPTH ] = "texm3x2depth", @@ -1707,7 +1708,7 @@ static void shader_dump_instruction_flags(struct vkd3d_d3d_asm_compiler *compile shader_dump_sync_flags(compiler, ins->flags); break; - case VKD3DSIH_TEX: + case VKD3DSIH_TEXLD: if (vkd3d_shader_ver_ge(&compiler->shader_version, 2, 0)) { if (ins->flags & VKD3DSI_TEXLD_PROJECT) diff --git a/libs/vkd3d-shader/d3dbc.c b/libs/vkd3d-shader/d3dbc.c index fb288aa57..05f46e264 100644 --- a/libs/vkd3d-shader/d3dbc.c +++ b/libs/vkd3d-shader/d3dbc.c @@ -385,8 +385,8 @@ static const struct vkd3d_sm1_opcode_info ps_opcode_table[] = {VKD3D_SM1_OP_TEXCOORD, 1, 1, VKD3DSIH_TEXCRD, {1, 4}, {1, 4}}, {VKD3D_SM1_OP_TEXKILL, 1, 0, VKD3DSIH_TEXKILL, {1, 0}}, {VKD3D_SM1_OP_TEX, 1, 0, VKD3DSIH_TEX, {0, 0}, {1, 3}}, - {VKD3D_SM1_OP_TEX, 1, 1, VKD3DSIH_TEX, {1, 4}, {1, 4}}, - {VKD3D_SM1_OP_TEX, 1, 2, VKD3DSIH_TEX, {2, 0}}, + {VKD3D_SM1_OP_TEX, 1, 1, VKD3DSIH_TEXLD, {1, 4}, {1, 4}}, + {VKD3D_SM1_OP_TEX, 1, 2, VKD3DSIH_TEXLD, {2, 0}}, {VKD3D_SM1_OP_TEXBEM, 1, 1, VKD3DSIH_TEXBEM, {0, 0}, {1, 3}}, {VKD3D_SM1_OP_TEXBEML, 1, 1, VKD3DSIH_TEXBEML, {1, 0}, {1, 3}}, {VKD3D_SM1_OP_TEXREG2AR, 1, 1, VKD3DSIH_TEXREG2AR, {1, 0}, {1, 3}}, @@ -2014,7 +2014,7 @@ static void d3dbc_write_vsir_instruction(struct d3dbc_compiler *d3dbc, const str case VKD3DSIH_MUL: case VKD3DSIH_SINCOS: case VKD3DSIH_SLT: - case VKD3DSIH_TEX: + case VKD3DSIH_TEXLD: case VKD3DSIH_TEXLDD: d3dbc_write_instruction(d3dbc, ins); break; diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c index b004ff89e..91f5646e8 100644 --- a/libs/vkd3d-shader/hlsl_codegen.c +++ b/libs/vkd3d-shader/hlsl_codegen.c @@ -9304,16 +9304,16 @@ static void sm1_generate_vsir_instr_resource_load(struct hlsl_ctx *ctx, switch (load->load_type) { case HLSL_RESOURCE_SAMPLE: - opcode = VKD3DSIH_TEX; + opcode = VKD3DSIH_TEXLD; break; case HLSL_RESOURCE_SAMPLE_PROJ: - opcode = VKD3DSIH_TEX; + opcode = VKD3DSIH_TEXLD; flags |= VKD3DSI_TEXLD_PROJECT; break; case HLSL_RESOURCE_SAMPLE_LOD_BIAS: - opcode = VKD3DSIH_TEX; + opcode = VKD3DSIH_TEXLD; flags |= VKD3DSI_TEXLD_BIAS; break; diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index 8785415e8..4abf6a65d 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -823,7 +823,7 @@ static enum vkd3d_result vsir_program_lower_texldp(struct vsir_program *program, div_ins->src[1] = tex->src[0]; div_ins->src[1].swizzle = vkd3d_shader_create_swizzle(w_comp, w_comp, w_comp, w_comp); - if (!vsir_instruction_init_with_params(program, tex_ins, location, VKD3DSIH_TEX, 1, 2)) + if (!vsir_instruction_init_with_params(program, tex_ins, location, VKD3DSIH_TEXLD, 1, 2)) return VKD3D_ERROR_OUT_OF_MEMORY; tex_ins->dst[0] = tex->dst[0]; @@ -838,7 +838,7 @@ static enum vkd3d_result vsir_program_lower_texldp(struct vsir_program *program, return VKD3D_OK; } -static enum vkd3d_result vsir_program_lower_tex(struct vsir_program *program, +static enum vkd3d_result vsir_program_lower_texld(struct vsir_program *program, struct vkd3d_shader_instruction *tex, struct vkd3d_shader_message_context *message_context) { unsigned int idx = tex->src[1].reg.idx[0].offset; @@ -1041,7 +1041,7 @@ static enum vkd3d_result vsir_program_lower_instructions(struct vsir_program *pr return ret; break; - case VKD3DSIH_TEX: + case VKD3DSIH_TEXLD: if (ins->flags == VKD3DSI_TEXLD_PROJECT) { if ((ret = vsir_program_lower_texldp(program, ins, &tmp_idx)) < 0) @@ -1049,7 +1049,7 @@ static enum vkd3d_result vsir_program_lower_instructions(struct vsir_program *pr } else { - if ((ret = vsir_program_lower_tex(program, ins, message_context)) < 0) + if ((ret = vsir_program_lower_texld(program, ins, message_context)) < 0) return ret; } break; diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c index 449d97bcf..2b86f6262 100644 --- a/libs/vkd3d-shader/vkd3d_shader_main.c +++ b/libs/vkd3d-shader/vkd3d_shader_main.c @@ -1436,13 +1436,14 @@ static int vkd3d_shader_scan_instruction(struct vkd3d_shader_scan_context *conte if (context->cf_info_count) context->cf_info[context->cf_info_count - 1].inside_block = false; break; - case VKD3DSIH_TEX: + case VKD3DSIH_TEXLD: if (context->version->major == 1) sampler_reg = &instruction->dst[0].reg; else sampler_reg = &instruction->src[1].reg; vkd3d_shader_scan_combined_sampler_usage(context, sampler_reg, sampler_reg); break; + case VKD3DSIH_TEX: case VKD3DSIH_TEXBEM: case VKD3DSIH_TEXBEML: case VKD3DSIH_TEXDP3TEX: diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h index 0054ed79e..e5cb4847c 100644 --- a/libs/vkd3d-shader/vkd3d_shader_private.h +++ b/libs/vkd3d-shader/vkd3d_shader_private.h @@ -557,6 +557,7 @@ enum vkd3d_shader_opcode VKD3DSIH_TEXDP3, VKD3DSIH_TEXDP3TEX, VKD3DSIH_TEXKILL, + VKD3DSIH_TEXLD, VKD3DSIH_TEXLDD, VKD3DSIH_TEXLDL, VKD3DSIH_TEXM3x2DEPTH,