From f9bb84e5ef13b52c207fe9eaa23f487cfba8bda6 Mon Sep 17 00:00:00 2001 From: Elizabeth Figura Date: Mon, 4 Aug 2025 22:18:32 -0500 Subject: [PATCH] vkd3d-shader/d3dbc: Lower TEXCRD. --- libs/vkd3d-shader/ir.c | 22 +++++++++++++++++++++- tests/hlsl/ps1-sampler.shader_test | 22 ++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index 0c5344a45..cd6fd7621 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -1387,6 +1387,23 @@ static enum vkd3d_result vsir_program_lower_sm4_sincos(struct vsir_program *prog return VKD3D_OK; } +static enum vkd3d_result vsir_program_lower_texcrd(struct vsir_program *program, + struct vkd3d_shader_instruction *ins, struct vkd3d_shader_message_context *message_context) +{ + /* texcrd DST, t# -> mov DST, t# */ + + if (ins->src[0].modifiers) + { + vkd3d_shader_error(message_context, &ins->location, VKD3D_SHADER_ERROR_VSIR_NOT_IMPLEMENTED, + "Aborting due to not yet implemented feature: texcrd source modifier."); + return VKD3D_ERROR_NOT_IMPLEMENTED; + } + + ins->opcode = VSIR_OP_MOV; + + return VKD3D_OK; +} + static enum vkd3d_result vsir_program_lower_texld_sm1(struct vsir_program *program, struct vkd3d_shader_instruction *ins, struct vkd3d_shader_message_context *message_context) { @@ -1649,6 +1666,10 @@ static enum vkd3d_result vsir_program_lower_d3dbc_instructions(struct vsir_progr switch (ins->opcode) { + case VSIR_OP_TEXCRD: + ret = vsir_program_lower_texcrd(program, ins, message_context); + break; + case VSIR_OP_TEXLD: if (program->shader_version.major == 1) ret = vsir_program_lower_texld_sm1(program, ins, message_context); @@ -1766,7 +1787,6 @@ static enum vkd3d_result vsir_program_lower_instructions(struct vsir_program *pr case VSIR_OP_TEXBEM: case VSIR_OP_TEXBEML: case VSIR_OP_TEXCOORD: - case VSIR_OP_TEXCRD: case VSIR_OP_TEXDEPTH: case VSIR_OP_TEXDP3: case VSIR_OP_TEXDP3TEX: diff --git a/tests/hlsl/ps1-sampler.shader_test b/tests/hlsl/ps1-sampler.shader_test index 0078d79b7..8f1208d22 100644 --- a/tests/hlsl/ps1-sampler.shader_test +++ b/tests/hlsl/ps1-sampler.shader_test @@ -28,3 +28,25 @@ probe (320, 240) f32(1, 1, 1, 0) probe (480, 240) f32(1, 0, 1, 0) probe (320, 360) f32(1, 1, 0, 0) probe (480, 360) f32(1, 0, 0, 0) + +[vertex shader] +void main(inout float4 pos : position, out float4 tex : texcoord) +{ + tex = pos; +} + +[pixel shader d3dbc-hex] +% TODO: Convert to assembly or HLSL. +ffff0104 % ps_1_4 +00000051 a00f0000 3e4ccccd 3e4ccccd 3e4ccccd 3e4ccccd % def c0, 0.2, 0.2, 0.2, 0.2 +00000040 80070000 b0e40000 % texcrd r0.xyz, t0 +00000001 80080000 a0e40000 % mov r0.w, c0 +00000002 800f0000 80e40000 a0e40000 % add r0, r0, c0 +0000ffff % end + +[test] +draw quad +probe (160, 120) f32(0.0, 0.7, 0.2, 0.4) 32 +probe (480, 120) f32(0.7, 0.7, 0.2, 0.4) 32 +probe (160, 360) f32(0.0, 0.0, 0.2, 0.4) 8 +probe (480, 360) f32(0.7, 0.0, 0.2, 0.4) 8