From: Conor McCarthy cmccarthy@codeweavers.com
--- libs/vkd3d-shader/d3d_asm.c | 16 +++++++----- libs/vkd3d-shader/dxil.c | 24 +++++++++--------- libs/vkd3d-shader/spirv.c | 32 +++++++++++++++--------- libs/vkd3d-shader/tpf.c | 12 ++++----- libs/vkd3d-shader/vkd3d_shader_private.h | 16 +++++++----- 5 files changed, 58 insertions(+), 42 deletions(-)
diff --git a/libs/vkd3d-shader/d3d_asm.c b/libs/vkd3d-shader/d3d_asm.c index 0a9561d05..442c1e414 100644 --- a/libs/vkd3d-shader/d3d_asm.c +++ b/libs/vkd3d-shader/d3d_asm.c @@ -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", diff --git a/libs/vkd3d-shader/dxil.c b/libs/vkd3d-shader/dxil.c index 0e47f275f..56edc784a 100644 --- a/libs/vkd3d-shader/dxil.c +++ b/libs/vkd3d-shader/dxil.c @@ -3462,20 +3462,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}, diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index b5fc64589..b2b8b4f55 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -7398,18 +7398,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: @@ -9598,18 +9602,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); diff --git a/libs/vkd3d-shader/tpf.c b/libs/vkd3d-shader/tpf.c index a9d89bd77..16f8fdb94 100644 --- a/libs/vkd3d-shader/tpf.c +++ b/libs/vkd3d-shader/tpf.c @@ -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"}, diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h index ab2a91885..502fedb86 100644 --- a/libs/vkd3d-shader/vkd3d_shader_private.h +++ b/libs/vkd3d-shader/vkd3d_shader_private.h @@ -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,