mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
vkd3d-shader/dxil: Implement DX intrinsics Dot2, Dot3 and Dot4.
This commit is contained in:
parent
2909a5aacc
commit
d72d5c35d1
Notes:
Alexandre Julliard
2024-04-03 00:21:02 +02:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/728
@ -382,6 +382,9 @@ enum dx_intrinsic_opcode
|
|||||||
DX_UMAD = 49,
|
DX_UMAD = 49,
|
||||||
DX_IBFE = 51,
|
DX_IBFE = 51,
|
||||||
DX_UBFE = 52,
|
DX_UBFE = 52,
|
||||||
|
DX_DOT2 = 54,
|
||||||
|
DX_DOT3 = 55,
|
||||||
|
DX_DOT4 = 56,
|
||||||
DX_CREATE_HANDLE = 57,
|
DX_CREATE_HANDLE = 57,
|
||||||
DX_CBUFFER_LOAD_LEGACY = 59,
|
DX_CBUFFER_LOAD_LEGACY = 59,
|
||||||
DX_SAMPLE = 60,
|
DX_SAMPLE = 60,
|
||||||
@ -4480,6 +4483,48 @@ static void sm6_parser_emit_dx_discard(struct sm6_parser *sm6, enum dx_intrinsic
|
|||||||
src_param_init_from_value(src_param, operands[0]);
|
src_param_init_from_value(src_param, operands[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void sm6_parser_emit_dx_dot(struct sm6_parser *sm6, enum dx_intrinsic_opcode op,
|
||||||
|
const struct sm6_value **operands, struct function_emission_state *state)
|
||||||
|
{
|
||||||
|
struct vkd3d_shader_src_param *src_params;
|
||||||
|
struct vkd3d_shader_instruction *ins;
|
||||||
|
struct vkd3d_shader_register regs[2];
|
||||||
|
enum vkd3d_shader_opcode handler_idx;
|
||||||
|
unsigned int component_count;
|
||||||
|
|
||||||
|
switch (op)
|
||||||
|
{
|
||||||
|
case DX_DOT2:
|
||||||
|
handler_idx = VKD3DSIH_DP2;
|
||||||
|
component_count = 2;
|
||||||
|
break;
|
||||||
|
case DX_DOT3:
|
||||||
|
handler_idx = VKD3DSIH_DP3;
|
||||||
|
component_count = 3;
|
||||||
|
break;
|
||||||
|
case DX_DOT4:
|
||||||
|
handler_idx = VKD3DSIH_DP4;
|
||||||
|
component_count = 4;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
vkd3d_unreachable();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sm6_parser_emit_composite_construct(sm6, &operands[0], component_count, state, ®s[0]))
|
||||||
|
return;
|
||||||
|
if (!sm6_parser_emit_composite_construct(sm6, &operands[component_count], component_count, state, ®s[1]))
|
||||||
|
return;
|
||||||
|
|
||||||
|
ins = state->ins;
|
||||||
|
vsir_instruction_init(ins, &sm6->p.location, handler_idx);
|
||||||
|
if (!(src_params = instruction_src_params_alloc(ins, 2, sm6)))
|
||||||
|
return;
|
||||||
|
src_param_init_vector_from_reg(&src_params[0], ®s[0]);
|
||||||
|
src_param_init_vector_from_reg(&src_params[1], ®s[1]);
|
||||||
|
|
||||||
|
instruction_dst_param_init_ssa_scalar(ins, sm6);
|
||||||
|
}
|
||||||
|
|
||||||
static void sm6_parser_emit_dx_fabs(struct sm6_parser *sm6, enum dx_intrinsic_opcode op,
|
static void sm6_parser_emit_dx_fabs(struct sm6_parser *sm6, enum dx_intrinsic_opcode op,
|
||||||
const struct sm6_value **operands, struct function_emission_state *state)
|
const struct sm6_value **operands, struct function_emission_state *state)
|
||||||
{
|
{
|
||||||
@ -5356,6 +5401,9 @@ static const struct sm6_dx_opcode_info sm6_dx_op_table[] =
|
|||||||
[DX_DERIV_FINEX ] = {"e", "R", sm6_parser_emit_dx_unary},
|
[DX_DERIV_FINEX ] = {"e", "R", sm6_parser_emit_dx_unary},
|
||||||
[DX_DERIV_FINEY ] = {"e", "R", sm6_parser_emit_dx_unary},
|
[DX_DERIV_FINEY ] = {"e", "R", sm6_parser_emit_dx_unary},
|
||||||
[DX_DISCARD ] = {"v", "1", sm6_parser_emit_dx_discard},
|
[DX_DISCARD ] = {"v", "1", sm6_parser_emit_dx_discard},
|
||||||
|
[DX_DOT2 ] = {"g", "RRRR", sm6_parser_emit_dx_dot},
|
||||||
|
[DX_DOT3 ] = {"g", "RRRRRR", sm6_parser_emit_dx_dot},
|
||||||
|
[DX_DOT4 ] = {"g", "RRRRRRRR", sm6_parser_emit_dx_dot},
|
||||||
[DX_EXP ] = {"g", "R", sm6_parser_emit_dx_unary},
|
[DX_EXP ] = {"g", "R", sm6_parser_emit_dx_unary},
|
||||||
[DX_FABS ] = {"g", "R", sm6_parser_emit_dx_fabs},
|
[DX_FABS ] = {"g", "R", sm6_parser_emit_dx_fabs},
|
||||||
[DX_FIRST_BIT_HI ] = {"i", "m", sm6_parser_emit_dx_unary},
|
[DX_FIRST_BIT_HI ] = {"i", "m", sm6_parser_emit_dx_unary},
|
||||||
|
@ -10,7 +10,7 @@ float4 main() : SV_TARGET
|
|||||||
[test]
|
[test]
|
||||||
uniform 0 float4 2.0 3.0 4.0 5.0
|
uniform 0 float4 2.0 3.0 4.0 5.0
|
||||||
uniform 4 float4 10.0 11.0 12.0 13.0
|
uniform 4 float4 10.0 11.0 12.0 13.0
|
||||||
todo(sm>=6 | glsl) draw quad
|
todo(glsl) draw quad
|
||||||
probe all rgba (166.0, 166.0, 166.0, 166.0)
|
probe all rgba (166.0, 166.0, 166.0, 166.0)
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
@ -25,7 +25,7 @@ float4 main() : SV_TARGET
|
|||||||
[test]
|
[test]
|
||||||
uniform 0 float4 2.0 3.0 0.0 0.0
|
uniform 0 float4 2.0 3.0 0.0 0.0
|
||||||
uniform 4 float4 10.0 11.0 12.0 13.0
|
uniform 4 float4 10.0 11.0 12.0 13.0
|
||||||
todo(sm<4 | sm>=6 | glsl) draw quad
|
todo(sm<4 | glsl) draw quad
|
||||||
probe all rgba (53.0, 53.0, 53.0, 53.0)
|
probe all rgba (53.0, 53.0, 53.0, 53.0)
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
@ -40,7 +40,7 @@ float4 main() : SV_TARGET
|
|||||||
[test]
|
[test]
|
||||||
uniform 0 float4 2.0 0.0 0.0 0.0
|
uniform 0 float4 2.0 0.0 0.0 0.0
|
||||||
uniform 4 float4 10.0 11.0 12.0 13.0
|
uniform 4 float4 10.0 11.0 12.0 13.0
|
||||||
todo(sm>=6 | glsl) draw quad
|
todo(glsl) draw quad
|
||||||
probe all rgba (92.0, 92.0, 92.0, 92.0)
|
probe all rgba (92.0, 92.0, 92.0, 92.0)
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
@ -55,7 +55,7 @@ float4 main() : SV_TARGET
|
|||||||
[test]
|
[test]
|
||||||
uniform 0 float4 10.0 11.0 12.0 13.0
|
uniform 0 float4 10.0 11.0 12.0 13.0
|
||||||
uniform 4 float4 2.0 0.0 0.0 0.0
|
uniform 4 float4 2.0 0.0 0.0 0.0
|
||||||
todo(sm>=6 | glsl) draw quad
|
todo(glsl) draw quad
|
||||||
probe all rgba (92.0, 92.0, 92.0, 92.0)
|
probe all rgba (92.0, 92.0, 92.0, 92.0)
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
|
@ -8,7 +8,7 @@ float4 main() : SV_TARGET
|
|||||||
|
|
||||||
[test]
|
[test]
|
||||||
uniform 0 float4 2.0 3.0 4.0 5.0
|
uniform 0 float4 2.0 3.0 4.0 5.0
|
||||||
todo(sm>=6 | glsl) draw quad
|
todo(glsl) draw quad
|
||||||
probe all rgba (0.272165537, 0.408248305, 0.544331074, 0.680413842) 2
|
probe all rgba (0.272165537, 0.408248305, 0.544331074, 0.680413842) 2
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
@ -21,7 +21,7 @@ float4 main() : SV_TARGET
|
|||||||
|
|
||||||
[test]
|
[test]
|
||||||
uniform 0 float4 2.0 3.0 4.0 0.0
|
uniform 0 float4 2.0 3.0 4.0 0.0
|
||||||
todo(sm>=6 | glsl) draw quad
|
todo(glsl) draw quad
|
||||||
probe all rgba (0.371390700, 0.557086051, 0.742781401, 0.0) 1
|
probe all rgba (0.371390700, 0.557086051, 0.742781401, 0.0) 1
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
@ -34,7 +34,7 @@ float4 main() : SV_TARGET
|
|||||||
|
|
||||||
[test]
|
[test]
|
||||||
uniform 0 float4 2.0 3.0 0.0 0.0
|
uniform 0 float4 2.0 3.0 0.0 0.0
|
||||||
todo(sm<4 | sm>=6 | glsl) draw quad
|
todo(sm<4 | glsl) draw quad
|
||||||
probe all rgba (0.554700196, 0.832050323, 0.0, 0.0) 1
|
probe all rgba (0.554700196, 0.832050323, 0.0, 0.0) 1
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
|
@ -10,7 +10,7 @@ float4 main() : sv_target
|
|||||||
[test]
|
[test]
|
||||||
uniform 0 float4 0.5 -0.1 0.2 0.3
|
uniform 0 float4 0.5 -0.1 0.2 0.3
|
||||||
uniform 4 float4 0.6 0.4 -0.3 1.0
|
uniform 4 float4 0.6 0.4 -0.3 1.0
|
||||||
todo(sm>=6 | glsl) draw quad
|
todo(glsl) draw quad
|
||||||
probe all rgba (-0.1, -0.5, 0.5, -0.7) 4
|
probe all rgba (-0.1, -0.5, 0.5, -0.7) 4
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
@ -27,7 +27,7 @@ float4 main() : sv_target
|
|||||||
[test]
|
[test]
|
||||||
uniform 0 float4 0.5 0.0 0.0 0.0
|
uniform 0 float4 0.5 0.0 0.0 0.0
|
||||||
uniform 4 float4 0.6 0.4 -0.3 1.0
|
uniform 4 float4 0.6 0.4 -0.3 1.0
|
||||||
todo(sm>=6 | glsl) draw quad
|
todo(glsl) draw quad
|
||||||
probe all rgba (-0.52, -0.18, 1.01, -1.2) 4
|
probe all rgba (-0.52, -0.18, 1.01, -1.2) 4
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
@ -44,7 +44,7 @@ float4 main() : sv_target
|
|||||||
[test]
|
[test]
|
||||||
uniform 0 float4 0.5 -0.1 0.2 0.3
|
uniform 0 float4 0.5 -0.1 0.2 0.3
|
||||||
uniform 4 float4 0.6 0.0 0.0 0.0
|
uniform 4 float4 0.6 0.0 0.0 0.0
|
||||||
todo(sm>=6 | glsl) draw quad
|
todo(glsl) draw quad
|
||||||
probe all rgba (-0.148, -0.748, -0.448, -0.348) 4
|
probe all rgba (-0.148, -0.748, -0.448, -0.348) 4
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
@ -79,7 +79,7 @@ float4 main() : sv_target
|
|||||||
[test]
|
[test]
|
||||||
uniform 0 float4 0.5 -0.1 0.0 0.0
|
uniform 0 float4 0.5 -0.1 0.0 0.0
|
||||||
uniform 4 float4 0.6 0.4 -0.3 1.0
|
uniform 4 float4 0.6 0.4 -0.3 1.0
|
||||||
todo(sm<4 | sm>=6 | glsl) draw quad
|
todo(sm<4 | glsl) draw quad
|
||||||
probe all rgba (0.188, -0.308, 0.0, 0.0) 4
|
probe all rgba (0.188, -0.308, 0.0, 0.0) 4
|
||||||
|
|
||||||
[pixel shader]
|
[pixel shader]
|
||||||
@ -97,5 +97,5 @@ float4 main() : sv_target
|
|||||||
[test]
|
[test]
|
||||||
uniform 0 float4 0.5 -0.1 0.2 0.0
|
uniform 0 float4 0.5 -0.1 0.2 0.0
|
||||||
uniform 4 float4 0.6 0.4 0.0 0.0
|
uniform 4 float4 0.6 0.4 0.0 0.0
|
||||||
todo(sm<4 | sm>=6 | glsl) draw quad
|
todo(sm<4 | glsl) draw quad
|
||||||
probe all rgba (0.188, -0.308, 0.0, 0.0) 4
|
probe all rgba (0.188, -0.308, 0.0, 0.0) 4
|
||||||
|
Loading…
Reference in New Issue
Block a user