mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-12-15 08:03:30 -08:00
vkd3d-shader/ir: Lower VSIR_OP_DP2ADD instructions.
This commit is contained in:
Notes:
Henri Verbeet
2025-12-08 17:49:28 +01:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1859
@@ -1270,6 +1270,44 @@ static enum vkd3d_result vsir_program_normalize_addr(struct vsir_program *progra
|
||||
return VKD3D_OK;
|
||||
}
|
||||
|
||||
static enum vkd3d_result vsir_program_lower_dp2add(struct vsir_program *program, struct vsir_program_iterator *dp2add)
|
||||
{
|
||||
struct vkd3d_shader_instruction *ins = vsir_program_iterator_current(dp2add);
|
||||
const struct vkd3d_shader_location location = ins->location;
|
||||
const struct vsir_src_operand *src = ins->src;
|
||||
const struct vsir_dst_operand *dst = ins->dst;
|
||||
struct vsir_program_iterator it;
|
||||
unsigned int dot_id;
|
||||
|
||||
/* dp2add DST, SRC0, SRC1, SRC2
|
||||
* ->
|
||||
* dp2 srDOT, SRC0, SRC1
|
||||
* add DST, srDOT, SRC2 */
|
||||
|
||||
if (!(ins = vsir_program_iterator_insert_before(dp2add, &it, 1)))
|
||||
return VKD3D_ERROR_OUT_OF_MEMORY;
|
||||
if (!vsir_instruction_init_with_params(program, ins, &location, VSIR_OP_DP2, 1, 2))
|
||||
goto fail;
|
||||
dot_id = program->ssa_count++;
|
||||
vsir_dst_operand_init_ssa(&ins->dst[0], dot_id, src[0].reg.data_type, VSIR_DIMENSION_SCALAR);
|
||||
ins->src[0] = src[0];
|
||||
ins->src[1] = src[1];
|
||||
|
||||
ins = vsir_program_iterator_next(&it);
|
||||
if (!vsir_instruction_init_with_params(program, ins, &location, VSIR_OP_ADD, 1, 2))
|
||||
goto fail;
|
||||
ins->dst[0] = dst[0];
|
||||
vsir_src_operand_init_ssa(&ins->src[0], dot_id, src[0].reg.data_type, VSIR_DIMENSION_SCALAR);
|
||||
ins->src[1] = src[2];
|
||||
|
||||
return VKD3D_OK;
|
||||
|
||||
fail:
|
||||
vsir_program_iterator_nop_range(&it, dp2add, &location);
|
||||
|
||||
return VKD3D_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
static enum vkd3d_result vsir_program_lower_ifc(struct vsir_program *program,
|
||||
struct vsir_program_iterator *it, unsigned int *tmp_idx,
|
||||
struct vkd3d_shader_message_context *message_context)
|
||||
@@ -2470,6 +2508,10 @@ static enum vkd3d_result vsir_program_lower_d3dbc_instructions(struct vsir_progr
|
||||
ret = vsir_program_lower_bem(program, &it);
|
||||
break;
|
||||
|
||||
case VSIR_OP_DP2ADD:
|
||||
ret = vsir_program_lower_dp2add(program, &it);
|
||||
break;
|
||||
|
||||
case VSIR_OP_IFC:
|
||||
ret = vsir_program_lower_ifc(program, &it, &tmp_idx, message_context);
|
||||
break;
|
||||
|
||||
@@ -11,7 +11,7 @@ ffff0200 % ps_2_0
|
||||
0000ffff % end
|
||||
|
||||
[test]
|
||||
todo draw quad
|
||||
draw quad
|
||||
probe (320, 240) f32(.5, .5, .5, 1.0)
|
||||
|
||||
% Test the _sat modifier.
|
||||
@@ -31,5 +31,5 @@ ffff0200 % ps_2_0
|
||||
0000ffff % end
|
||||
|
||||
[test]
|
||||
todo draw quad
|
||||
draw quad
|
||||
probe (320, 240) f32(.5, .5, .5, 1.0)
|
||||
|
||||
@@ -25,8 +25,8 @@ float4 main() : SV_TARGET
|
||||
[test]
|
||||
uniform 0 float4 2.0 3.0 0.0 0.0
|
||||
uniform 4 float4 10.0 11.0 12.0 13.0
|
||||
todo(sm<4) draw quad
|
||||
probe (0, 0) rgba (53.0, 53.0, 53.0, 53.0)
|
||||
draw quad
|
||||
probe (0, 0) f32(53.0, 53.0, 53.0, 53.0)
|
||||
|
||||
[pixel shader]
|
||||
uniform float x;
|
||||
|
||||
@@ -34,8 +34,8 @@ float4 main() : SV_TARGET
|
||||
|
||||
[test]
|
||||
uniform 0 float4 2.0 3.0 0.0 0.0
|
||||
todo(sm<4) draw quad
|
||||
probe (0, 0) rgba (3.60555124, 3.60555124, 3.60555124, 3.60555124) 1
|
||||
draw quad
|
||||
probe (0, 0) f32(3.60555124, 3.60555124, 3.60555124, 3.60555124) 1
|
||||
|
||||
[pixel shader]
|
||||
uniform float1 x;
|
||||
|
||||
@@ -34,8 +34,8 @@ float4 main() : SV_TARGET
|
||||
|
||||
[test]
|
||||
uniform 0 float4 2.0 3.0 0.0 0.0
|
||||
todo(sm<4) draw quad
|
||||
probe (0, 0) rgba (0.554700196, 0.832050323, 0.0, 0.0) 1
|
||||
draw quad
|
||||
probe (0, 0) f32(0.554700196, 0.832050323, 0.0, 0.0) 1
|
||||
|
||||
[pixel shader]
|
||||
uniform float1 x;
|
||||
|
||||
@@ -79,8 +79,8 @@ float4 main() : sv_target
|
||||
[test]
|
||||
uniform 0 float4 0.5 -0.1 0.0 0.0
|
||||
uniform 4 float4 0.6 0.4 -0.3 1.0
|
||||
todo(sm<4) draw quad
|
||||
probe (0, 0) rgba (0.188, -0.308, 0.0, 0.0) 4
|
||||
draw quad
|
||||
probe (0, 0) f32(0.188, -0.308, 0.0, 0.0) 4
|
||||
|
||||
[pixel shader]
|
||||
uniform float4 i;
|
||||
@@ -97,5 +97,5 @@ float4 main() : sv_target
|
||||
[test]
|
||||
uniform 0 float4 0.5 -0.1 0.2 0.0
|
||||
uniform 4 float4 0.6 0.4 0.0 0.0
|
||||
todo(sm<4) draw quad
|
||||
probe (0, 0) rgba (0.188, -0.308, 0.0, 0.0) 4
|
||||
draw quad
|
||||
probe (0, 0) f32(0.188, -0.308, 0.0, 0.0) 4
|
||||
|
||||
@@ -34,11 +34,11 @@ float4 main() : sv_target
|
||||
uniform 0 float4 0.5 -0.1 0.2 0.3
|
||||
uniform 4 float4 0.6 0.4 -0.3 1.0
|
||||
uniform 8 float 0.2
|
||||
todo(sm<4) draw quad
|
||||
probe (0, 0) rgba (-0.519904912, -0.4332699, 0.0, 0.0) 32
|
||||
draw quad
|
||||
probe (0, 0) f32(-0.519904912, -0.4332699, 0.0, 0.0) 32
|
||||
uniform 8 float 100.0
|
||||
todo(sm<4) draw quad
|
||||
probe (0, 0) rgba (0.0, 0.0, 0.0, 0.0)
|
||||
draw quad
|
||||
probe (0, 0) f32(0.0, 0.0, 0.0, 0.0)
|
||||
|
||||
[pixel shader]
|
||||
float4 r;
|
||||
@@ -55,11 +55,11 @@ float4 main() : sv_target
|
||||
uniform 0 float4 0.5 -0.1 0.2 0.3
|
||||
uniform 4 float4 0.6 0.4 -0.3 1.0
|
||||
uniform 8 float 0.2
|
||||
todo(sm<4) draw quad
|
||||
probe (0, 0) rgba (-0.519904912, -0.4332699, 0.0, 0.0) 32
|
||||
draw quad
|
||||
probe (0, 0) f32(-0.519904912, -0.4332699, 0.0, 0.0) 32
|
||||
uniform 8 float 100.0
|
||||
todo(sm<4) draw quad
|
||||
probe (0, 0) rgba (0.0, 0.0, 0.0, 0.0)
|
||||
draw quad
|
||||
probe (0, 0) f32(0.0, 0.0, 0.0, 0.0)
|
||||
|
||||
[pixel shader]
|
||||
float4 r;
|
||||
@@ -76,11 +76,11 @@ float4 main() : sv_target
|
||||
uniform 0 float4 0.5 -0.1 0.2 0.3
|
||||
uniform 4 float4 0.6 0.4 -0.3 1.0
|
||||
uniform 8 float 0.2
|
||||
todo(sm<4) draw quad
|
||||
probe (0, 0) rgba (-0.519904912, -0.4332699, 0.0, 0.0) 32
|
||||
draw quad
|
||||
probe (0, 0) f32(-0.519904912, -0.4332699, 0.0, 0.0) 32
|
||||
uniform 8 float 100.0
|
||||
todo(sm<4) draw quad
|
||||
probe (0, 0) rgba (0.0, 0.0, 0.0, 0.0)
|
||||
draw quad
|
||||
probe (0, 0) f32(0.0, 0.0, 0.0, 0.0)
|
||||
|
||||
[pixel shader]
|
||||
float4 r;
|
||||
|
||||
Reference in New Issue
Block a user