mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-12-15 08:03:30 -08:00
vkd3d-shader/ir: Fix the addition swizzle in vsir_program_lower_precise_mad().
The swizzle from vsir_swizzle_from_writemask() is for use with a contiguous write mask starting at bit zero, but we need the final write mask to match that of the original MAD instruction. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=58746
This commit is contained in:
committed by
Henri Verbeet
parent
f9d12e5596
commit
1c23976660
Notes:
Henri Verbeet
2025-10-15 13:00:34 +02:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1781
@@ -1426,9 +1426,12 @@ static enum vkd3d_result vsir_program_lower_precise_mad(struct vsir_program *pro
|
||||
vsir_register_init(&mul_dst->reg, VKD3DSPR_TEMP, mul_ins->src[0].reg.data_type, 1);
|
||||
mul_dst->reg.dimension = add_ins->dst->reg.dimension;
|
||||
mul_dst->reg.idx[0].offset = *tmp_idx;
|
||||
mul_dst->write_mask = mul_dst->reg.dimension == VSIR_DIMENSION_VEC4
|
||||
? VKD3DSP_WRITEMASK_ALL : VKD3DSP_WRITEMASK_0;
|
||||
|
||||
add_ins->src[0].reg = mul_dst->reg;
|
||||
add_ins->src[0].swizzle = vsir_swizzle_from_writemask(mul_dst->write_mask);
|
||||
add_ins->src[0].swizzle = mul_dst->reg.dimension == VSIR_DIMENSION_VEC4
|
||||
? VKD3D_SHADER_NO_SWIZZLE : VKD3D_SHADER_SWIZZLE(X, X, X, X);
|
||||
add_ins->src[0].modifiers = 0;
|
||||
add_ins->src[1] = mul_ins->src[2];
|
||||
|
||||
|
||||
@@ -201,7 +201,7 @@ uniform 0 float4 1.5 1.5 1.5 1.5
|
||||
uniform 4 float4 1.00000007 -42.1 1.625 -5.0
|
||||
uniform 8 float4 1.00000007 -1.0 2.0 2.0
|
||||
todo(glsl | msl) draw quad
|
||||
todo probe (0, 0) f32(6.0, 6.0, 3.93750072, 314.25) 1
|
||||
probe (0, 0) f32(6.0, 6.0, 3.93750072, 314.25) 1
|
||||
|
||||
[require]
|
||||
shader model >= 5.0
|
||||
|
||||
Reference in New Issue
Block a user