mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/ir: Handle TEXLDL instructions in vsir_program_lower_instructions().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=58063
This commit is contained in:
committed by
Henri Verbeet
parent
a7266284ee
commit
969b6f5946
Notes:
Henri Verbeet
2025-07-23 17:30:15 +02:00
Approved-by: Elizabeth Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1637
@@ -1497,6 +1497,34 @@ static enum vkd3d_result vsir_program_lower_texldd(struct vsir_program *program,
|
|||||||
return VKD3D_OK;
|
return VKD3D_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum vkd3d_result vsir_program_lower_texldl(struct vsir_program *program,
|
||||||
|
struct vkd3d_shader_instruction *texldl)
|
||||||
|
{
|
||||||
|
unsigned int idx = texldl->src[1].reg.idx[0].offset;
|
||||||
|
enum vkd3d_shader_swizzle_component w;
|
||||||
|
struct vkd3d_shader_src_param *srcs;
|
||||||
|
|
||||||
|
VKD3D_ASSERT(texldl->src[1].reg.idx_count == 1);
|
||||||
|
VKD3D_ASSERT(!texldl->src[1].reg.idx[0].rel_addr);
|
||||||
|
|
||||||
|
if (!(srcs = shader_src_param_allocator_get(&program->instructions.src_params, 4)))
|
||||||
|
return VKD3D_ERROR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
|
srcs[0] = texldl->src[0];
|
||||||
|
vsir_src_param_init_resource(&srcs[1], idx, idx);
|
||||||
|
vsir_src_param_init_sampler(&srcs[2], idx, idx);
|
||||||
|
|
||||||
|
texldl->opcode = VSIR_OP_SAMPLE_LOD;
|
||||||
|
texldl->src = srcs;
|
||||||
|
texldl->src_count = 4;
|
||||||
|
|
||||||
|
w = vsir_swizzle_get_component(srcs[0].swizzle, 3);
|
||||||
|
srcs[3] = texldl->src[0];
|
||||||
|
srcs[3].swizzle = vkd3d_shader_create_swizzle(w, w, w, w);
|
||||||
|
|
||||||
|
return VKD3D_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static enum vkd3d_result vsir_program_lower_dcl_input(struct vsir_program *program,
|
static enum vkd3d_result vsir_program_lower_dcl_input(struct vsir_program *program,
|
||||||
struct vkd3d_shader_instruction *ins, struct vsir_transformation_context *ctx)
|
struct vkd3d_shader_instruction *ins, struct vsir_transformation_context *ctx)
|
||||||
{
|
{
|
||||||
@@ -1668,6 +1696,11 @@ static enum vkd3d_result vsir_program_lower_instructions(struct vsir_program *pr
|
|||||||
return ret;
|
return ret;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case VSIR_OP_TEXLDL:
|
||||||
|
if ((ret = vsir_program_lower_texldl(program, ins)) < 0)
|
||||||
|
return ret;
|
||||||
|
break;
|
||||||
|
|
||||||
case VSIR_OP_TEXBEM:
|
case VSIR_OP_TEXBEM:
|
||||||
case VSIR_OP_TEXBEML:
|
case VSIR_OP_TEXBEML:
|
||||||
case VSIR_OP_TEXCOORD:
|
case VSIR_OP_TEXCOORD:
|
||||||
@@ -1675,7 +1708,6 @@ static enum vkd3d_result vsir_program_lower_instructions(struct vsir_program *pr
|
|||||||
case VSIR_OP_TEXDEPTH:
|
case VSIR_OP_TEXDEPTH:
|
||||||
case VSIR_OP_TEXDP3:
|
case VSIR_OP_TEXDP3:
|
||||||
case VSIR_OP_TEXDP3TEX:
|
case VSIR_OP_TEXDP3TEX:
|
||||||
case VSIR_OP_TEXLDL:
|
|
||||||
case VSIR_OP_TEXM3x2PAD:
|
case VSIR_OP_TEXM3x2PAD:
|
||||||
case VSIR_OP_TEXM3x2TEX:
|
case VSIR_OP_TEXM3x2TEX:
|
||||||
case VSIR_OP_TEXM3x3DIFF:
|
case VSIR_OP_TEXM3x3DIFF:
|
||||||
|
Reference in New Issue
Block a user