mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
vkd3d-shader/spirv: Introduce orderedness to comparison instructions.
This commit is contained in:
parent
d3b90cc877
commit
22960753e9
Notes:
Alexandre Julliard
2023-11-10 21:38:32 +01: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/441
@ -106,9 +106,9 @@ static const char * const shader_opcode_names[] =
|
||||
[VKD3DSIH_DEFAULT ] = "default",
|
||||
[VKD3DSIH_DEFB ] = "defb",
|
||||
[VKD3DSIH_DEFI ] = "defi",
|
||||
[VKD3DSIH_DEQ ] = "deq",
|
||||
[VKD3DSIH_DEQO ] = "deq",
|
||||
[VKD3DSIH_DFMA ] = "dfma",
|
||||
[VKD3DSIH_DGE ] = "dge",
|
||||
[VKD3DSIH_DGEO ] = "dge",
|
||||
[VKD3DSIH_DISCARD ] = "discard",
|
||||
[VKD3DSIH_DIV ] = "div",
|
||||
[VKD3DSIH_DLT ] = "dlt",
|
||||
@ -140,7 +140,8 @@ static const char * const shader_opcode_names[] =
|
||||
[VKD3DSIH_ENDLOOP ] = "endloop",
|
||||
[VKD3DSIH_ENDREP ] = "endrep",
|
||||
[VKD3DSIH_ENDSWITCH ] = "endswitch",
|
||||
[VKD3DSIH_EQ ] = "eq",
|
||||
[VKD3DSIH_EQO ] = "eq",
|
||||
[VKD3DSIH_EQU ] = "eq_unord",
|
||||
[VKD3DSIH_EVAL_CENTROID ] = "eval_centroid",
|
||||
[VKD3DSIH_EVAL_SAMPLE_INDEX ] = "eval_sample_index",
|
||||
[VKD3DSIH_EXP ] = "exp",
|
||||
@ -164,7 +165,8 @@ static const char * const shader_opcode_names[] =
|
||||
[VKD3DSIH_GATHER4_PO_C_S ] = "gather4_po_c_s",
|
||||
[VKD3DSIH_GATHER4_PO_S ] = "gather4_po_s",
|
||||
[VKD3DSIH_GATHER4_S ] = "gather4_s",
|
||||
[VKD3DSIH_GE ] = "ge",
|
||||
[VKD3DSIH_GEO ] = "ge",
|
||||
[VKD3DSIH_GEU ] = "ge_unord",
|
||||
[VKD3DSIH_HS_CONTROL_POINT_PHASE ] = "hs_control_point_phase",
|
||||
[VKD3DSIH_HS_DECLS ] = "hs_decls",
|
||||
[VKD3DSIH_HS_FORK_PHASE ] = "hs_fork_phase",
|
||||
@ -217,7 +219,8 @@ static const char * const shader_opcode_names[] =
|
||||
[VKD3DSIH_LOGP ] = "logp",
|
||||
[VKD3DSIH_LOOP ] = "loop",
|
||||
[VKD3DSIH_LRP ] = "lrp",
|
||||
[VKD3DSIH_LT ] = "lt",
|
||||
[VKD3DSIH_LTO ] = "lt",
|
||||
[VKD3DSIH_LTU ] = "lt_unord",
|
||||
[VKD3DSIH_M3x2 ] = "m3x2",
|
||||
[VKD3DSIH_M3x3 ] = "m3x3",
|
||||
[VKD3DSIH_M3x4 ] = "m3x4",
|
||||
@ -231,7 +234,8 @@ static const char * const shader_opcode_names[] =
|
||||
[VKD3DSIH_MOVC ] = "movc",
|
||||
[VKD3DSIH_MSAD ] = "msad",
|
||||
[VKD3DSIH_MUL ] = "mul",
|
||||
[VKD3DSIH_NE ] = "ne",
|
||||
[VKD3DSIH_NEO ] = "ne_ord",
|
||||
[VKD3DSIH_NEU ] = "ne",
|
||||
[VKD3DSIH_NOP ] = "nop",
|
||||
[VKD3DSIH_NOT ] = "not",
|
||||
[VKD3DSIH_NRM ] = "nrm",
|
||||
|
@ -3460,20 +3460,20 @@ static const struct sm6_cmp_info *sm6_map_cmp2_op(uint64_t code)
|
||||
static const struct sm6_cmp_info cmp_op_table[] =
|
||||
{
|
||||
[FCMP_FALSE] = {VKD3DSIH_INVALID},
|
||||
[FCMP_OEQ] = {VKD3DSIH_EQ},
|
||||
[FCMP_OGT] = {VKD3DSIH_LT, true},
|
||||
[FCMP_OGE] = {VKD3DSIH_GE},
|
||||
[FCMP_OLT] = {VKD3DSIH_LT},
|
||||
[FCMP_OLE] = {VKD3DSIH_GE, true},
|
||||
[FCMP_ONE] = {VKD3DSIH_NE},
|
||||
[FCMP_OEQ] = {VKD3DSIH_EQO},
|
||||
[FCMP_OGT] = {VKD3DSIH_LTO, true},
|
||||
[FCMP_OGE] = {VKD3DSIH_GEO},
|
||||
[FCMP_OLT] = {VKD3DSIH_LTO},
|
||||
[FCMP_OLE] = {VKD3DSIH_GEO, true},
|
||||
[FCMP_ONE] = {VKD3DSIH_NEO},
|
||||
[FCMP_ORD] = {VKD3DSIH_INVALID},
|
||||
[FCMP_UNO] = {VKD3DSIH_INVALID},
|
||||
[FCMP_UEQ] = {VKD3DSIH_EQ},
|
||||
[FCMP_UGT] = {VKD3DSIH_LT, true},
|
||||
[FCMP_UGE] = {VKD3DSIH_GE},
|
||||
[FCMP_ULT] = {VKD3DSIH_LT},
|
||||
[FCMP_ULE] = {VKD3DSIH_GE, true},
|
||||
[FCMP_UNE] = {VKD3DSIH_NE},
|
||||
[FCMP_UEQ] = {VKD3DSIH_EQU},
|
||||
[FCMP_UGT] = {VKD3DSIH_LTU, true},
|
||||
[FCMP_UGE] = {VKD3DSIH_GEU},
|
||||
[FCMP_ULT] = {VKD3DSIH_LTU},
|
||||
[FCMP_ULE] = {VKD3DSIH_GEU, true},
|
||||
[FCMP_UNE] = {VKD3DSIH_NEU},
|
||||
[FCMP_TRUE] = {VKD3DSIH_INVALID},
|
||||
|
||||
[ICMP_EQ] = {VKD3DSIH_IEQ},
|
||||
|
@ -7359,18 +7359,22 @@ static void spirv_compiler_emit_comparison_instruction(struct spirv_compiler *co
|
||||
|
||||
switch (instruction->handler_idx)
|
||||
{
|
||||
case VKD3DSIH_DEQ:
|
||||
case VKD3DSIH_EQ: op = SpvOpFOrdEqual; break;
|
||||
case VKD3DSIH_DGE:
|
||||
case VKD3DSIH_GE: op = SpvOpFOrdGreaterThanEqual; break;
|
||||
case VKD3DSIH_DEQO:
|
||||
case VKD3DSIH_EQO: op = SpvOpFOrdEqual; break;
|
||||
case VKD3DSIH_EQU: op = SpvOpFUnordEqual; break;
|
||||
case VKD3DSIH_DGEO:
|
||||
case VKD3DSIH_GEO: op = SpvOpFOrdGreaterThanEqual; break;
|
||||
case VKD3DSIH_GEU: op = SpvOpFUnordGreaterThanEqual; break;
|
||||
case VKD3DSIH_IEQ: op = SpvOpIEqual; break;
|
||||
case VKD3DSIH_IGE: op = SpvOpSGreaterThanEqual; break;
|
||||
case VKD3DSIH_ILT: op = SpvOpSLessThan; break;
|
||||
case VKD3DSIH_INE: op = SpvOpINotEqual; break;
|
||||
case VKD3DSIH_DLT:
|
||||
case VKD3DSIH_LT: op = SpvOpFOrdLessThan; break;
|
||||
case VKD3DSIH_LTO: op = SpvOpFOrdLessThan; break;
|
||||
case VKD3DSIH_LTU: op = SpvOpFUnordLessThan; break;
|
||||
case VKD3DSIH_NEO: op = SpvOpFOrdNotEqual; break;
|
||||
case VKD3DSIH_DNE:
|
||||
case VKD3DSIH_NE: op = SpvOpFUnordNotEqual; break;
|
||||
case VKD3DSIH_NEU: op = SpvOpFUnordNotEqual; break;
|
||||
case VKD3DSIH_UGE: op = SpvOpUGreaterThanEqual; break;
|
||||
case VKD3DSIH_ULT: op = SpvOpULessThan; break;
|
||||
default:
|
||||
@ -9559,18 +9563,22 @@ static int spirv_compiler_handle_instruction(struct spirv_compiler *compiler,
|
||||
case VKD3DSIH_FTOU:
|
||||
spirv_compiler_emit_ftou(compiler, instruction);
|
||||
break;
|
||||
case VKD3DSIH_DEQ:
|
||||
case VKD3DSIH_DGE:
|
||||
case VKD3DSIH_DEQO:
|
||||
case VKD3DSIH_DGEO:
|
||||
case VKD3DSIH_DLT:
|
||||
case VKD3DSIH_DNE:
|
||||
case VKD3DSIH_EQ:
|
||||
case VKD3DSIH_GE:
|
||||
case VKD3DSIH_EQO:
|
||||
case VKD3DSIH_EQU:
|
||||
case VKD3DSIH_GEO:
|
||||
case VKD3DSIH_GEU:
|
||||
case VKD3DSIH_IEQ:
|
||||
case VKD3DSIH_IGE:
|
||||
case VKD3DSIH_ILT:
|
||||
case VKD3DSIH_INE:
|
||||
case VKD3DSIH_LT:
|
||||
case VKD3DSIH_NE:
|
||||
case VKD3DSIH_LTO:
|
||||
case VKD3DSIH_LTU:
|
||||
case VKD3DSIH_NEO:
|
||||
case VKD3DSIH_NEU:
|
||||
case VKD3DSIH_UGE:
|
||||
case VKD3DSIH_ULT:
|
||||
spirv_compiler_emit_comparison_instruction(compiler, instruction);
|
||||
|
@ -1345,12 +1345,12 @@ static void init_sm4_lookup_tables(struct vkd3d_sm4_lookup_tables *lookup)
|
||||
{VKD3D_SM4_OP_ENDIF, VKD3DSIH_ENDIF, "", ""},
|
||||
{VKD3D_SM4_OP_ENDLOOP, VKD3DSIH_ENDLOOP, "", ""},
|
||||
{VKD3D_SM4_OP_ENDSWITCH, VKD3DSIH_ENDSWITCH, "", ""},
|
||||
{VKD3D_SM4_OP_EQ, VKD3DSIH_EQ, "u", "ff"},
|
||||
{VKD3D_SM4_OP_EQ, VKD3DSIH_EQO, "u", "ff"},
|
||||
{VKD3D_SM4_OP_EXP, VKD3DSIH_EXP, "f", "f"},
|
||||
{VKD3D_SM4_OP_FRC, VKD3DSIH_FRC, "f", "f"},
|
||||
{VKD3D_SM4_OP_FTOI, VKD3DSIH_FTOI, "i", "f"},
|
||||
{VKD3D_SM4_OP_FTOU, VKD3DSIH_FTOU, "u", "f"},
|
||||
{VKD3D_SM4_OP_GE, VKD3DSIH_GE, "u", "ff"},
|
||||
{VKD3D_SM4_OP_GE, VKD3DSIH_GEO, "u", "ff"},
|
||||
{VKD3D_SM4_OP_IADD, VKD3DSIH_IADD, "i", "ii"},
|
||||
{VKD3D_SM4_OP_IF, VKD3DSIH_IF, "", "u",
|
||||
shader_sm4_read_conditional_op},
|
||||
@ -1371,7 +1371,7 @@ static void init_sm4_lookup_tables(struct vkd3d_sm4_lookup_tables *lookup)
|
||||
{VKD3D_SM4_OP_LD2DMS, VKD3DSIH_LD2DMS, "u", "iRi"},
|
||||
{VKD3D_SM4_OP_LOG, VKD3DSIH_LOG, "f", "f"},
|
||||
{VKD3D_SM4_OP_LOOP, VKD3DSIH_LOOP, "", ""},
|
||||
{VKD3D_SM4_OP_LT, VKD3DSIH_LT, "u", "ff"},
|
||||
{VKD3D_SM4_OP_LT, VKD3DSIH_LTO, "u", "ff"},
|
||||
{VKD3D_SM4_OP_MAD, VKD3DSIH_MAD, "f", "fff"},
|
||||
{VKD3D_SM4_OP_MIN, VKD3DSIH_MIN, "f", "ff"},
|
||||
{VKD3D_SM4_OP_MAX, VKD3DSIH_MAX, "f", "ff"},
|
||||
@ -1380,7 +1380,7 @@ static void init_sm4_lookup_tables(struct vkd3d_sm4_lookup_tables *lookup)
|
||||
{VKD3D_SM4_OP_MOV, VKD3DSIH_MOV, "f", "f"},
|
||||
{VKD3D_SM4_OP_MOVC, VKD3DSIH_MOVC, "f", "uff"},
|
||||
{VKD3D_SM4_OP_MUL, VKD3DSIH_MUL, "f", "ff"},
|
||||
{VKD3D_SM4_OP_NE, VKD3DSIH_NE, "u", "ff"},
|
||||
{VKD3D_SM4_OP_NE, VKD3DSIH_NEU, "u", "ff"},
|
||||
{VKD3D_SM4_OP_NOP, VKD3DSIH_NOP, "", ""},
|
||||
{VKD3D_SM4_OP_NOT, VKD3DSIH_NOT, "u", "u"},
|
||||
{VKD3D_SM4_OP_OR, VKD3DSIH_OR, "u", "uu"},
|
||||
@ -1551,8 +1551,8 @@ static void init_sm4_lookup_tables(struct vkd3d_sm4_lookup_tables *lookup)
|
||||
{VKD3D_SM5_OP_DMAX, VKD3DSIH_DMAX, "d", "dd"},
|
||||
{VKD3D_SM5_OP_DMIN, VKD3DSIH_DMIN, "d", "dd"},
|
||||
{VKD3D_SM5_OP_DMUL, VKD3DSIH_DMUL, "d", "dd"},
|
||||
{VKD3D_SM5_OP_DEQ, VKD3DSIH_DEQ, "u", "dd"},
|
||||
{VKD3D_SM5_OP_DGE, VKD3DSIH_DGE, "u", "dd"},
|
||||
{VKD3D_SM5_OP_DEQ, VKD3DSIH_DEQO, "u", "dd"},
|
||||
{VKD3D_SM5_OP_DGE, VKD3DSIH_DGEO, "u", "dd"},
|
||||
{VKD3D_SM5_OP_DLT, VKD3DSIH_DLT, "u", "dd"},
|
||||
{VKD3D_SM5_OP_DNE, VKD3DSIH_DNE, "u", "dd"},
|
||||
{VKD3D_SM5_OP_DMOV, VKD3DSIH_DMOV, "d", "d"},
|
||||
|
@ -294,9 +294,9 @@ enum vkd3d_shader_opcode
|
||||
VKD3DSIH_DEFAULT,
|
||||
VKD3DSIH_DEFB,
|
||||
VKD3DSIH_DEFI,
|
||||
VKD3DSIH_DEQ,
|
||||
VKD3DSIH_DEQO,
|
||||
VKD3DSIH_DFMA,
|
||||
VKD3DSIH_DGE,
|
||||
VKD3DSIH_DGEO,
|
||||
VKD3DSIH_DISCARD,
|
||||
VKD3DSIH_DIV,
|
||||
VKD3DSIH_DLT,
|
||||
@ -328,7 +328,8 @@ enum vkd3d_shader_opcode
|
||||
VKD3DSIH_ENDLOOP,
|
||||
VKD3DSIH_ENDREP,
|
||||
VKD3DSIH_ENDSWITCH,
|
||||
VKD3DSIH_EQ,
|
||||
VKD3DSIH_EQO,
|
||||
VKD3DSIH_EQU,
|
||||
VKD3DSIH_EVAL_CENTROID,
|
||||
VKD3DSIH_EVAL_SAMPLE_INDEX,
|
||||
VKD3DSIH_EXP,
|
||||
@ -352,7 +353,8 @@ enum vkd3d_shader_opcode
|
||||
VKD3DSIH_GATHER4_PO_C_S,
|
||||
VKD3DSIH_GATHER4_PO_S,
|
||||
VKD3DSIH_GATHER4_S,
|
||||
VKD3DSIH_GE,
|
||||
VKD3DSIH_GEO,
|
||||
VKD3DSIH_GEU,
|
||||
VKD3DSIH_HS_CONTROL_POINT_PHASE,
|
||||
VKD3DSIH_HS_DECLS,
|
||||
VKD3DSIH_HS_FORK_PHASE,
|
||||
@ -405,7 +407,8 @@ enum vkd3d_shader_opcode
|
||||
VKD3DSIH_LOGP,
|
||||
VKD3DSIH_LOOP,
|
||||
VKD3DSIH_LRP,
|
||||
VKD3DSIH_LT,
|
||||
VKD3DSIH_LTO,
|
||||
VKD3DSIH_LTU,
|
||||
VKD3DSIH_M3x2,
|
||||
VKD3DSIH_M3x3,
|
||||
VKD3DSIH_M3x4,
|
||||
@ -419,7 +422,8 @@ enum vkd3d_shader_opcode
|
||||
VKD3DSIH_MOVC,
|
||||
VKD3DSIH_MSAD,
|
||||
VKD3DSIH_MUL,
|
||||
VKD3DSIH_NE,
|
||||
VKD3DSIH_NEO,
|
||||
VKD3DSIH_NEU,
|
||||
VKD3DSIH_NOP,
|
||||
VKD3DSIH_NOT,
|
||||
VKD3DSIH_NRM,
|
||||
|
Loading…
x
Reference in New Issue
Block a user