vkd3d-shader/d3dbc: Lower TEXCRD.

This commit is contained in:
Elizabeth Figura
2025-08-04 22:18:32 -05:00
committed by Henri Verbeet
parent 731b94f6f9
commit f9bb84e5ef
Notes: Henri Verbeet 2025-08-07 20:51:20 +02:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1670
2 changed files with 43 additions and 1 deletions

View File

@@ -1387,6 +1387,23 @@ static enum vkd3d_result vsir_program_lower_sm4_sincos(struct vsir_program *prog
return VKD3D_OK; 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, 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) 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) switch (ins->opcode)
{ {
case VSIR_OP_TEXCRD:
ret = vsir_program_lower_texcrd(program, ins, message_context);
break;
case VSIR_OP_TEXLD: case VSIR_OP_TEXLD:
if (program->shader_version.major == 1) if (program->shader_version.major == 1)
ret = vsir_program_lower_texld_sm1(program, ins, message_context); 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_TEXBEM:
case VSIR_OP_TEXBEML: case VSIR_OP_TEXBEML:
case VSIR_OP_TEXCOORD: case VSIR_OP_TEXCOORD:
case VSIR_OP_TEXCRD:
case VSIR_OP_TEXDEPTH: case VSIR_OP_TEXDEPTH:
case VSIR_OP_TEXDP3: case VSIR_OP_TEXDP3:
case VSIR_OP_TEXDP3TEX: case VSIR_OP_TEXDP3TEX:

View File

@@ -28,3 +28,25 @@ probe (320, 240) f32(1, 1, 1, 0)
probe (480, 240) f32(1, 0, 1, 0) probe (480, 240) f32(1, 0, 1, 0)
probe (320, 360) f32(1, 1, 0, 0) probe (320, 360) f32(1, 1, 0, 0)
probe (480, 360) f32(1, 0, 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