vkd3d-shader/ir: Introduce vsir_opcode_get_name().

This commit is contained in:
Henri Verbeet
2025-06-03 13:46:04 +02:00
parent 1b389f29c5
commit 1214359022
Notes: Henri Verbeet 2025-06-10 18:06:20 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Francisco Casas (@fcasas)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1549
3 changed files with 341 additions and 331 deletions

View File

@@ -27,336 +27,6 @@
#include <stdio.h> #include <stdio.h>
#include <math.h> #include <math.h>
static const char * const shader_opcode_names[] =
{
[VKD3DSIH_ABS ] = "abs",
[VKD3DSIH_ACOS ] = "acos",
[VKD3DSIH_ADD ] = "add",
[VKD3DSIH_AND ] = "and",
[VKD3DSIH_ASIN ] = "asin",
[VKD3DSIH_ATAN ] = "atan",
[VKD3DSIH_ATOMIC_AND ] = "atomic_and",
[VKD3DSIH_ATOMIC_CMP_STORE ] = "atomic_cmp_store",
[VKD3DSIH_ATOMIC_IADD ] = "atomic_iadd",
[VKD3DSIH_ATOMIC_IMAX ] = "atomic_imax",
[VKD3DSIH_ATOMIC_IMIN ] = "atomic_imin",
[VKD3DSIH_ATOMIC_OR ] = "atomic_or",
[VKD3DSIH_ATOMIC_UMAX ] = "atomic_umax",
[VKD3DSIH_ATOMIC_UMIN ] = "atomic_umin",
[VKD3DSIH_ATOMIC_XOR ] = "atomic_xor",
[VKD3DSIH_BEM ] = "bem",
[VKD3DSIH_BFI ] = "bfi",
[VKD3DSIH_BFREV ] = "bfrev",
[VKD3DSIH_BRANCH ] = "branch",
[VKD3DSIH_BREAK ] = "break",
[VKD3DSIH_BREAKC ] = "break",
[VKD3DSIH_BREAKP ] = "breakp",
[VKD3DSIH_BUFINFO ] = "bufinfo",
[VKD3DSIH_CALL ] = "call",
[VKD3DSIH_CALLNZ ] = "callnz",
[VKD3DSIH_CASE ] = "case",
[VKD3DSIH_CHECK_ACCESS_FULLY_MAPPED ] = "check_access_fully_mapped",
[VKD3DSIH_CMP ] = "cmp",
[VKD3DSIH_CND ] = "cnd",
[VKD3DSIH_CONTINUE ] = "continue",
[VKD3DSIH_CONTINUEP ] = "continuec",
[VKD3DSIH_COUNTBITS ] = "countbits",
[VKD3DSIH_CRS ] = "crs",
[VKD3DSIH_CUT ] = "cut",
[VKD3DSIH_CUT_STREAM ] = "cut_stream",
[VKD3DSIH_DADD ] = "dadd",
[VKD3DSIH_DCL ] = "dcl",
[VKD3DSIH_DCL_CONSTANT_BUFFER ] = "dcl_constantBuffer",
[VKD3DSIH_DCL_FUNCTION_BODY ] = "dcl_function_body",
[VKD3DSIH_DCL_FUNCTION_TABLE ] = "dcl_function_table",
[VKD3DSIH_DCL_GLOBAL_FLAGS ] = "dcl_globalFlags",
[VKD3DSIH_DCL_GS_INSTANCES ] = "dcl_gs_instances",
[VKD3DSIH_DCL_HS_FORK_PHASE_INSTANCE_COUNT] = "dcl_hs_fork_phase_instance_count",
[VKD3DSIH_DCL_HS_JOIN_PHASE_INSTANCE_COUNT] = "dcl_hs_join_phase_instance_count",
[VKD3DSIH_DCL_HS_MAX_TESSFACTOR ] = "dcl_hs_max_tessfactor",
[VKD3DSIH_DCL_IMMEDIATE_CONSTANT_BUFFER ] = "dcl_immediateConstantBuffer",
[VKD3DSIH_DCL_INDEX_RANGE ] = "dcl_index_range",
[VKD3DSIH_DCL_INDEXABLE_TEMP ] = "dcl_indexableTemp",
[VKD3DSIH_DCL_INPUT ] = "dcl_input",
[VKD3DSIH_DCL_INPUT_CONTROL_POINT_COUNT ] = "dcl_input_control_point_count",
[VKD3DSIH_DCL_INPUT_PRIMITIVE ] = "dcl_inputprimitive",
[VKD3DSIH_DCL_INPUT_PS ] = "dcl_input_ps",
[VKD3DSIH_DCL_INPUT_PS_SGV ] = "dcl_input_ps_sgv",
[VKD3DSIH_DCL_INPUT_PS_SIV ] = "dcl_input_ps_siv",
[VKD3DSIH_DCL_INPUT_SGV ] = "dcl_input_sgv",
[VKD3DSIH_DCL_INPUT_SIV ] = "dcl_input_siv",
[VKD3DSIH_DCL_INTERFACE ] = "dcl_interface",
[VKD3DSIH_DCL_OUTPUT ] = "dcl_output",
[VKD3DSIH_DCL_OUTPUT_CONTROL_POINT_COUNT ] = "dcl_output_control_point_count",
[VKD3DSIH_DCL_OUTPUT_SGV ] = "dcl_output_sgv",
[VKD3DSIH_DCL_OUTPUT_SIV ] = "dcl_output_siv",
[VKD3DSIH_DCL_OUTPUT_TOPOLOGY ] = "dcl_outputtopology",
[VKD3DSIH_DCL_RESOURCE_RAW ] = "dcl_resource_raw",
[VKD3DSIH_DCL_RESOURCE_STRUCTURED ] = "dcl_resource_structured",
[VKD3DSIH_DCL_SAMPLER ] = "dcl_sampler",
[VKD3DSIH_DCL_STREAM ] = "dcl_stream",
[VKD3DSIH_DCL_TEMPS ] = "dcl_temps",
[VKD3DSIH_DCL_TESSELLATOR_DOMAIN ] = "dcl_tessellator_domain",
[VKD3DSIH_DCL_TESSELLATOR_OUTPUT_PRIMITIVE] = "dcl_tessellator_output_primitive",
[VKD3DSIH_DCL_TESSELLATOR_PARTITIONING ] = "dcl_tessellator_partitioning",
[VKD3DSIH_DCL_TGSM_RAW ] = "dcl_tgsm_raw",
[VKD3DSIH_DCL_TGSM_STRUCTURED ] = "dcl_tgsm_structured",
[VKD3DSIH_DCL_THREAD_GROUP ] = "dcl_thread_group",
[VKD3DSIH_DCL_UAV_RAW ] = "dcl_uav_raw",
[VKD3DSIH_DCL_UAV_STRUCTURED ] = "dcl_uav_structured",
[VKD3DSIH_DCL_UAV_TYPED ] = "dcl_uav_typed",
[VKD3DSIH_DCL_VERTICES_OUT ] = "dcl_maxout",
[VKD3DSIH_DDIV ] = "ddiv",
[VKD3DSIH_DEF ] = "def",
[VKD3DSIH_DEFAULT ] = "default",
[VKD3DSIH_DEFB ] = "defb",
[VKD3DSIH_DEFI ] = "defi",
[VKD3DSIH_DEQO ] = "deq",
[VKD3DSIH_DFMA ] = "dfma",
[VKD3DSIH_DGEO ] = "dge",
[VKD3DSIH_DISCARD ] = "discard",
[VKD3DSIH_DIV ] = "div",
[VKD3DSIH_DLT ] = "dlt",
[VKD3DSIH_DMAX ] = "dmax",
[VKD3DSIH_DMIN ] = "dmin",
[VKD3DSIH_DMOV ] = "dmov",
[VKD3DSIH_DMOVC ] = "dmovc",
[VKD3DSIH_DMUL ] = "dmul",
[VKD3DSIH_DNE ] = "dne",
[VKD3DSIH_DP2 ] = "dp2",
[VKD3DSIH_DP2ADD ] = "dp2add",
[VKD3DSIH_DP3 ] = "dp3",
[VKD3DSIH_DP4 ] = "dp4",
[VKD3DSIH_DRCP ] = "drcp",
[VKD3DSIH_DST ] = "dst",
[VKD3DSIH_DSX ] = "dsx",
[VKD3DSIH_DSX_COARSE ] = "deriv_rtx_coarse",
[VKD3DSIH_DSX_FINE ] = "deriv_rtx_fine",
[VKD3DSIH_DSY ] = "dsy",
[VKD3DSIH_DSY_COARSE ] = "deriv_rty_coarse",
[VKD3DSIH_DSY_FINE ] = "deriv_rty_fine",
[VKD3DSIH_DTOF ] = "dtof",
[VKD3DSIH_DTOI ] = "dtoi",
[VKD3DSIH_DTOU ] = "dtou",
[VKD3DSIH_ELSE ] = "else",
[VKD3DSIH_EMIT ] = "emit",
[VKD3DSIH_EMIT_STREAM ] = "emit_stream",
[VKD3DSIH_ENDIF ] = "endif",
[VKD3DSIH_ENDLOOP ] = "endloop",
[VKD3DSIH_ENDREP ] = "endrep",
[VKD3DSIH_ENDSWITCH ] = "endswitch",
[VKD3DSIH_EQO ] = "eq",
[VKD3DSIH_EQU ] = "eq_unord",
[VKD3DSIH_EVAL_CENTROID ] = "eval_centroid",
[VKD3DSIH_EVAL_SAMPLE_INDEX ] = "eval_sample_index",
[VKD3DSIH_EXP ] = "exp",
[VKD3DSIH_EXPP ] = "expp",
[VKD3DSIH_F16TOF32 ] = "f16tof32",
[VKD3DSIH_F32TOF16 ] = "f32tof16",
[VKD3DSIH_FCALL ] = "fcall",
[VKD3DSIH_FIRSTBIT_HI ] = "firstbit_hi",
[VKD3DSIH_FIRSTBIT_LO ] = "firstbit_lo",
[VKD3DSIH_FIRSTBIT_SHI ] = "firstbit_shi",
[VKD3DSIH_FRC ] = "frc",
[VKD3DSIH_FREM ] = "frem",
[VKD3DSIH_FTOD ] = "ftod",
[VKD3DSIH_FTOI ] = "ftoi",
[VKD3DSIH_FTOU ] = "ftou",
[VKD3DSIH_GATHER4 ] = "gather4",
[VKD3DSIH_GATHER4_C ] = "gather4_c",
[VKD3DSIH_GATHER4_C_S ] = "gather4_c_s",
[VKD3DSIH_GATHER4_PO ] = "gather4_po",
[VKD3DSIH_GATHER4_PO_C ] = "gather4_po_c",
[VKD3DSIH_GATHER4_PO_C_S ] = "gather4_po_c_s",
[VKD3DSIH_GATHER4_PO_S ] = "gather4_po_s",
[VKD3DSIH_GATHER4_S ] = "gather4_s",
[VKD3DSIH_GEO ] = "ge",
[VKD3DSIH_GEU ] = "ge_unord",
[VKD3DSIH_HCOS ] = "hcos",
[VKD3DSIH_HS_CONTROL_POINT_PHASE ] = "hs_control_point_phase",
[VKD3DSIH_HS_DECLS ] = "hs_decls",
[VKD3DSIH_HS_FORK_PHASE ] = "hs_fork_phase",
[VKD3DSIH_HS_JOIN_PHASE ] = "hs_join_phase",
[VKD3DSIH_HSIN ] = "hsin",
[VKD3DSIH_HTAN ] = "htan",
[VKD3DSIH_IADD ] = "iadd",
[VKD3DSIH_IBFE ] = "ibfe",
[VKD3DSIH_IDIV ] = "idiv",
[VKD3DSIH_IEQ ] = "ieq",
[VKD3DSIH_IF ] = "if",
[VKD3DSIH_IFC ] = "if",
[VKD3DSIH_IGE ] = "ige",
[VKD3DSIH_ILT ] = "ilt",
[VKD3DSIH_IMAD ] = "imad",
[VKD3DSIH_IMAX ] = "imax",
[VKD3DSIH_IMIN ] = "imin",
[VKD3DSIH_IMM_ATOMIC_ALLOC ] = "imm_atomic_alloc",
[VKD3DSIH_IMM_ATOMIC_AND ] = "imm_atomic_and",
[VKD3DSIH_IMM_ATOMIC_CMP_EXCH ] = "imm_atomic_cmp_exch",
[VKD3DSIH_IMM_ATOMIC_CONSUME ] = "imm_atomic_consume",
[VKD3DSIH_IMM_ATOMIC_EXCH ] = "imm_atomic_exch",
[VKD3DSIH_IMM_ATOMIC_IADD ] = "imm_atomic_iadd",
[VKD3DSIH_IMM_ATOMIC_IMAX ] = "imm_atomic_imax",
[VKD3DSIH_IMM_ATOMIC_IMIN ] = "imm_atomic_imin",
[VKD3DSIH_IMM_ATOMIC_OR ] = "imm_atomic_or",
[VKD3DSIH_IMM_ATOMIC_UMAX ] = "imm_atomic_umax",
[VKD3DSIH_IMM_ATOMIC_UMIN ] = "imm_atomic_umin",
[VKD3DSIH_IMM_ATOMIC_XOR ] = "imm_atomic_xor",
[VKD3DSIH_IMUL ] = "imul",
[VKD3DSIH_INE ] = "ine",
[VKD3DSIH_INEG ] = "ineg",
[VKD3DSIH_ISFINITE ] = "isfinite",
[VKD3DSIH_ISHL ] = "ishl",
[VKD3DSIH_ISHR ] = "ishr",
[VKD3DSIH_ISINF ] = "isinf",
[VKD3DSIH_ISNAN ] = "isnan",
[VKD3DSIH_ITOD ] = "itod",
[VKD3DSIH_ITOF ] = "itof",
[VKD3DSIH_ITOI ] = "itoi",
[VKD3DSIH_LABEL ] = "label",
[VKD3DSIH_LD ] = "ld",
[VKD3DSIH_LD2DMS ] = "ld2dms",
[VKD3DSIH_LD2DMS_S ] = "ld2dms_s",
[VKD3DSIH_LD_RAW ] = "ld_raw",
[VKD3DSIH_LD_RAW_S ] = "ld_raw_s",
[VKD3DSIH_LD_S ] = "ld_s",
[VKD3DSIH_LD_STRUCTURED ] = "ld_structured",
[VKD3DSIH_LD_STRUCTURED_S ] = "ld_structured_s",
[VKD3DSIH_LD_UAV_TYPED ] = "ld_uav_typed",
[VKD3DSIH_LD_UAV_TYPED_S ] = "ld_uav_typed_s",
[VKD3DSIH_LIT ] = "lit",
[VKD3DSIH_LOD ] = "lod",
[VKD3DSIH_LOG ] = "log",
[VKD3DSIH_LOGP ] = "logp",
[VKD3DSIH_LOOP ] = "loop",
[VKD3DSIH_LRP ] = "lrp",
[VKD3DSIH_LTO ] = "lt",
[VKD3DSIH_LTU ] = "lt_unord",
[VKD3DSIH_M3x2 ] = "m3x2",
[VKD3DSIH_M3x3 ] = "m3x3",
[VKD3DSIH_M3x4 ] = "m3x4",
[VKD3DSIH_M4x3 ] = "m4x3",
[VKD3DSIH_M4x4 ] = "m4x4",
[VKD3DSIH_MAD ] = "mad",
[VKD3DSIH_MAX ] = "max",
[VKD3DSIH_MIN ] = "min",
[VKD3DSIH_MOV ] = "mov",
[VKD3DSIH_MOVA ] = "mova",
[VKD3DSIH_MOVC ] = "movc",
[VKD3DSIH_MSAD ] = "msad",
[VKD3DSIH_MUL ] = "mul",
[VKD3DSIH_NEO ] = "ne_ord",
[VKD3DSIH_NEU ] = "ne",
[VKD3DSIH_NOP ] = "nop",
[VKD3DSIH_NOT ] = "not",
[VKD3DSIH_NRM ] = "nrm",
[VKD3DSIH_OR ] = "or",
[VKD3DSIH_ORD ] = "ord",
[VKD3DSIH_PHASE ] = "phase",
[VKD3DSIH_PHI ] = "phi",
[VKD3DSIH_POW ] = "pow",
[VKD3DSIH_QUAD_READ_ACROSS_D ] = "quad_read_across_d",
[VKD3DSIH_QUAD_READ_ACROSS_X ] = "quad_read_across_x",
[VKD3DSIH_QUAD_READ_ACROSS_Y ] = "quad_read_across_y",
[VKD3DSIH_QUAD_READ_LANE_AT ] = "quad_read_lane_at",
[VKD3DSIH_RCP ] = "rcp",
[VKD3DSIH_REP ] = "rep",
[VKD3DSIH_RESINFO ] = "resinfo",
[VKD3DSIH_RET ] = "ret",
[VKD3DSIH_RETP ] = "retp",
[VKD3DSIH_ROUND_NE ] = "round_ne",
[VKD3DSIH_ROUND_NI ] = "round_ni",
[VKD3DSIH_ROUND_PI ] = "round_pi",
[VKD3DSIH_ROUND_Z ] = "round_z",
[VKD3DSIH_RSQ ] = "rsq",
[VKD3DSIH_SAMPLE ] = "sample",
[VKD3DSIH_SAMPLE_B ] = "sample_b",
[VKD3DSIH_SAMPLE_B_CL_S ] = "sample_b_cl_s",
[VKD3DSIH_SAMPLE_C ] = "sample_c",
[VKD3DSIH_SAMPLE_C_CL_S ] = "sample_c_cl_s",
[VKD3DSIH_SAMPLE_C_LZ ] = "sample_c_lz",
[VKD3DSIH_SAMPLE_C_LZ_S ] = "sample_c_lz_s",
[VKD3DSIH_SAMPLE_CL_S ] = "sample_cl_s",
[VKD3DSIH_SAMPLE_GRAD ] = "sample_d",
[VKD3DSIH_SAMPLE_GRAD_CL_S ] = "sample_d_cl_s",
[VKD3DSIH_SAMPLE_INFO ] = "sample_info",
[VKD3DSIH_SAMPLE_LOD ] = "sample_l",
[VKD3DSIH_SAMPLE_LOD_S ] = "sample_l_s",
[VKD3DSIH_SAMPLE_POS ] = "sample_pos",
[VKD3DSIH_SETP ] = "setp",
[VKD3DSIH_SGE ] = "sge",
[VKD3DSIH_SGN ] = "sgn",
[VKD3DSIH_SINCOS ] = "sincos",
[VKD3DSIH_SLT ] = "slt",
[VKD3DSIH_SQRT ] = "sqrt",
[VKD3DSIH_STORE_RAW ] = "store_raw",
[VKD3DSIH_STORE_STRUCTURED ] = "store_structured",
[VKD3DSIH_STORE_UAV_TYPED ] = "store_uav_typed",
[VKD3DSIH_SUB ] = "sub",
[VKD3DSIH_SWAPC ] = "swapc",
[VKD3DSIH_SWITCH ] = "switch",
[VKD3DSIH_SWITCH_MONOLITHIC ] = "switch",
[VKD3DSIH_SYNC ] = "sync",
[VKD3DSIH_TAN ] = "tan",
[VKD3DSIH_TEX ] = "tex",
[VKD3DSIH_TEXBEM ] = "texbem",
[VKD3DSIH_TEXBEML ] = "texbeml",
[VKD3DSIH_TEXCOORD ] = "texcoord",
[VKD3DSIH_TEXCRD ] = "texcrd",
[VKD3DSIH_TEXDEPTH ] = "texdepth",
[VKD3DSIH_TEXDP3 ] = "texdp3",
[VKD3DSIH_TEXDP3TEX ] = "texdp3tex",
[VKD3DSIH_TEXKILL ] = "texkill",
[VKD3DSIH_TEXLD ] = "texld",
[VKD3DSIH_TEXLDD ] = "texldd",
[VKD3DSIH_TEXLDL ] = "texldl",
[VKD3DSIH_TEXM3x2DEPTH ] = "texm3x2depth",
[VKD3DSIH_TEXM3x2PAD ] = "texm3x2pad",
[VKD3DSIH_TEXM3x2TEX ] = "texm3x2tex",
[VKD3DSIH_TEXM3x3 ] = "texm3x3",
[VKD3DSIH_TEXM3x3DIFF ] = "texm3x3diff",
[VKD3DSIH_TEXM3x3PAD ] = "texm3x3pad",
[VKD3DSIH_TEXM3x3SPEC ] = "texm3x3spec",
[VKD3DSIH_TEXM3x3TEX ] = "texm3x3tex",
[VKD3DSIH_TEXM3x3VSPEC ] = "texm3x3vspec",
[VKD3DSIH_TEXREG2AR ] = "texreg2ar",
[VKD3DSIH_TEXREG2GB ] = "texreg2gb",
[VKD3DSIH_TEXREG2RGB ] = "texreg2rgb",
[VKD3DSIH_UBFE ] = "ubfe",
[VKD3DSIH_UDIV ] = "udiv",
[VKD3DSIH_UGE ] = "uge",
[VKD3DSIH_ULT ] = "ult",
[VKD3DSIH_UMAX ] = "umax",
[VKD3DSIH_UMIN ] = "umin",
[VKD3DSIH_UMUL ] = "umul",
[VKD3DSIH_UNO ] = "uno",
[VKD3DSIH_USHR ] = "ushr",
[VKD3DSIH_UTOD ] = "utod",
[VKD3DSIH_UTOF ] = "utof",
[VKD3DSIH_UTOU ] = "utou",
[VKD3DSIH_WAVE_ACTIVE_ALL_EQUAL ] = "wave_active_all_equal",
[VKD3DSIH_WAVE_ACTIVE_BALLOT ] = "wave_active_ballot",
[VKD3DSIH_WAVE_ACTIVE_BIT_AND ] = "wave_active_bit_and",
[VKD3DSIH_WAVE_ACTIVE_BIT_OR ] = "wave_active_bit_or",
[VKD3DSIH_WAVE_ACTIVE_BIT_XOR ] = "wave_active_bit_xor",
[VKD3DSIH_WAVE_ALL_BIT_COUNT ] = "wave_all_bit_count",
[VKD3DSIH_WAVE_ALL_TRUE ] = "wave_all_true",
[VKD3DSIH_WAVE_ANY_TRUE ] = "wave_any_true",
[VKD3DSIH_WAVE_IS_FIRST_LANE ] = "wave_is_first_lane",
[VKD3DSIH_WAVE_OP_ADD ] = "wave_op_add",
[VKD3DSIH_WAVE_OP_IMAX ] = "wave_op_imax",
[VKD3DSIH_WAVE_OP_IMIN ] = "wave_op_imin",
[VKD3DSIH_WAVE_OP_MAX ] = "wave_op_max",
[VKD3DSIH_WAVE_OP_MIN ] = "wave_op_min",
[VKD3DSIH_WAVE_OP_MUL ] = "wave_op_mul",
[VKD3DSIH_WAVE_OP_UMAX ] = "wave_op_umax",
[VKD3DSIH_WAVE_OP_UMIN ] = "wave_op_umin",
[VKD3DSIH_WAVE_PREFIX_BIT_COUNT ] = "wave_prefix_bit_count",
[VKD3DSIH_WAVE_READ_LANE_AT ] = "wave_read_lane_at",
[VKD3DSIH_WAVE_READ_LANE_FIRST ] = "wave_read_lane_first",
[VKD3DSIH_XOR ] = "xor",
};
static const char * const shader_register_names[] = static const char * const shader_register_names[] =
{ {
[VKD3DSPR_ADDR ] = "a", [VKD3DSPR_ADDR ] = "a",
@@ -1750,7 +1420,7 @@ static void shader_dump_register_space(struct vkd3d_d3d_asm_compiler *compiler,
static void shader_print_opcode(struct vkd3d_d3d_asm_compiler *compiler, enum vkd3d_shader_opcode opcode) static void shader_print_opcode(struct vkd3d_d3d_asm_compiler *compiler, enum vkd3d_shader_opcode opcode)
{ {
vkd3d_string_buffer_printf(&compiler->buffer, "%s%s%s", compiler->colours.opcode, vkd3d_string_buffer_printf(&compiler->buffer, "%s%s%s", compiler->colours.opcode,
shader_opcode_names[opcode], compiler->colours.reset); vsir_opcode_get_name(opcode, "<unknown>"), compiler->colours.reset);
} }
static void shader_dump_icb(struct vkd3d_d3d_asm_compiler *compiler, static void shader_dump_icb(struct vkd3d_d3d_asm_compiler *compiler,

View File

@@ -29,6 +29,344 @@ struct vsir_transformation_context
struct vkd3d_shader_message_context *message_context; struct vkd3d_shader_message_context *message_context;
}; };
const char *vsir_opcode_get_name(enum vkd3d_shader_opcode op, const char *error)
{
static const char * const names[] =
{
[VKD3DSIH_ABS ] = "abs",
[VKD3DSIH_ACOS ] = "acos",
[VKD3DSIH_ADD ] = "add",
[VKD3DSIH_AND ] = "and",
[VKD3DSIH_ASIN ] = "asin",
[VKD3DSIH_ATAN ] = "atan",
[VKD3DSIH_ATOMIC_AND ] = "atomic_and",
[VKD3DSIH_ATOMIC_CMP_STORE ] = "atomic_cmp_store",
[VKD3DSIH_ATOMIC_IADD ] = "atomic_iadd",
[VKD3DSIH_ATOMIC_IMAX ] = "atomic_imax",
[VKD3DSIH_ATOMIC_IMIN ] = "atomic_imin",
[VKD3DSIH_ATOMIC_OR ] = "atomic_or",
[VKD3DSIH_ATOMIC_UMAX ] = "atomic_umax",
[VKD3DSIH_ATOMIC_UMIN ] = "atomic_umin",
[VKD3DSIH_ATOMIC_XOR ] = "atomic_xor",
[VKD3DSIH_BEM ] = "bem",
[VKD3DSIH_BFI ] = "bfi",
[VKD3DSIH_BFREV ] = "bfrev",
[VKD3DSIH_BRANCH ] = "branch",
[VKD3DSIH_BREAK ] = "break",
[VKD3DSIH_BREAKC ] = "break",
[VKD3DSIH_BREAKP ] = "breakp",
[VKD3DSIH_BUFINFO ] = "bufinfo",
[VKD3DSIH_CALL ] = "call",
[VKD3DSIH_CALLNZ ] = "callnz",
[VKD3DSIH_CASE ] = "case",
[VKD3DSIH_CHECK_ACCESS_FULLY_MAPPED ] = "check_access_fully_mapped",
[VKD3DSIH_CMP ] = "cmp",
[VKD3DSIH_CND ] = "cnd",
[VKD3DSIH_CONTINUE ] = "continue",
[VKD3DSIH_CONTINUEP ] = "continuec",
[VKD3DSIH_COUNTBITS ] = "countbits",
[VKD3DSIH_CRS ] = "crs",
[VKD3DSIH_CUT ] = "cut",
[VKD3DSIH_CUT_STREAM ] = "cut_stream",
[VKD3DSIH_DADD ] = "dadd",
[VKD3DSIH_DCL ] = "dcl",
[VKD3DSIH_DCL_CONSTANT_BUFFER ] = "dcl_constantBuffer",
[VKD3DSIH_DCL_FUNCTION_BODY ] = "dcl_function_body",
[VKD3DSIH_DCL_FUNCTION_TABLE ] = "dcl_function_table",
[VKD3DSIH_DCL_GLOBAL_FLAGS ] = "dcl_globalFlags",
[VKD3DSIH_DCL_GS_INSTANCES ] = "dcl_gs_instances",
[VKD3DSIH_DCL_HS_FORK_PHASE_INSTANCE_COUNT] = "dcl_hs_fork_phase_instance_count",
[VKD3DSIH_DCL_HS_JOIN_PHASE_INSTANCE_COUNT] = "dcl_hs_join_phase_instance_count",
[VKD3DSIH_DCL_HS_MAX_TESSFACTOR ] = "dcl_hs_max_tessfactor",
[VKD3DSIH_DCL_IMMEDIATE_CONSTANT_BUFFER ] = "dcl_immediateConstantBuffer",
[VKD3DSIH_DCL_INDEX_RANGE ] = "dcl_index_range",
[VKD3DSIH_DCL_INDEXABLE_TEMP ] = "dcl_indexableTemp",
[VKD3DSIH_DCL_INPUT ] = "dcl_input",
[VKD3DSIH_DCL_INPUT_CONTROL_POINT_COUNT ] = "dcl_input_control_point_count",
[VKD3DSIH_DCL_INPUT_PRIMITIVE ] = "dcl_inputprimitive",
[VKD3DSIH_DCL_INPUT_PS ] = "dcl_input_ps",
[VKD3DSIH_DCL_INPUT_PS_SGV ] = "dcl_input_ps_sgv",
[VKD3DSIH_DCL_INPUT_PS_SIV ] = "dcl_input_ps_siv",
[VKD3DSIH_DCL_INPUT_SGV ] = "dcl_input_sgv",
[VKD3DSIH_DCL_INPUT_SIV ] = "dcl_input_siv",
[VKD3DSIH_DCL_INTERFACE ] = "dcl_interface",
[VKD3DSIH_DCL_OUTPUT ] = "dcl_output",
[VKD3DSIH_DCL_OUTPUT_CONTROL_POINT_COUNT ] = "dcl_output_control_point_count",
[VKD3DSIH_DCL_OUTPUT_SGV ] = "dcl_output_sgv",
[VKD3DSIH_DCL_OUTPUT_SIV ] = "dcl_output_siv",
[VKD3DSIH_DCL_OUTPUT_TOPOLOGY ] = "dcl_outputtopology",
[VKD3DSIH_DCL_RESOURCE_RAW ] = "dcl_resource_raw",
[VKD3DSIH_DCL_RESOURCE_STRUCTURED ] = "dcl_resource_structured",
[VKD3DSIH_DCL_SAMPLER ] = "dcl_sampler",
[VKD3DSIH_DCL_STREAM ] = "dcl_stream",
[VKD3DSIH_DCL_TEMPS ] = "dcl_temps",
[VKD3DSIH_DCL_TESSELLATOR_DOMAIN ] = "dcl_tessellator_domain",
[VKD3DSIH_DCL_TESSELLATOR_OUTPUT_PRIMITIVE] = "dcl_tessellator_output_primitive",
[VKD3DSIH_DCL_TESSELLATOR_PARTITIONING ] = "dcl_tessellator_partitioning",
[VKD3DSIH_DCL_TGSM_RAW ] = "dcl_tgsm_raw",
[VKD3DSIH_DCL_TGSM_STRUCTURED ] = "dcl_tgsm_structured",
[VKD3DSIH_DCL_THREAD_GROUP ] = "dcl_thread_group",
[VKD3DSIH_DCL_UAV_RAW ] = "dcl_uav_raw",
[VKD3DSIH_DCL_UAV_STRUCTURED ] = "dcl_uav_structured",
[VKD3DSIH_DCL_UAV_TYPED ] = "dcl_uav_typed",
[VKD3DSIH_DCL_VERTICES_OUT ] = "dcl_maxout",
[VKD3DSIH_DDIV ] = "ddiv",
[VKD3DSIH_DEF ] = "def",
[VKD3DSIH_DEFAULT ] = "default",
[VKD3DSIH_DEFB ] = "defb",
[VKD3DSIH_DEFI ] = "defi",
[VKD3DSIH_DEQO ] = "deq",
[VKD3DSIH_DFMA ] = "dfma",
[VKD3DSIH_DGEO ] = "dge",
[VKD3DSIH_DISCARD ] = "discard",
[VKD3DSIH_DIV ] = "div",
[VKD3DSIH_DLT ] = "dlt",
[VKD3DSIH_DMAX ] = "dmax",
[VKD3DSIH_DMIN ] = "dmin",
[VKD3DSIH_DMOV ] = "dmov",
[VKD3DSIH_DMOVC ] = "dmovc",
[VKD3DSIH_DMUL ] = "dmul",
[VKD3DSIH_DNE ] = "dne",
[VKD3DSIH_DP2 ] = "dp2",
[VKD3DSIH_DP2ADD ] = "dp2add",
[VKD3DSIH_DP3 ] = "dp3",
[VKD3DSIH_DP4 ] = "dp4",
[VKD3DSIH_DRCP ] = "drcp",
[VKD3DSIH_DST ] = "dst",
[VKD3DSIH_DSX ] = "dsx",
[VKD3DSIH_DSX_COARSE ] = "deriv_rtx_coarse",
[VKD3DSIH_DSX_FINE ] = "deriv_rtx_fine",
[VKD3DSIH_DSY ] = "dsy",
[VKD3DSIH_DSY_COARSE ] = "deriv_rty_coarse",
[VKD3DSIH_DSY_FINE ] = "deriv_rty_fine",
[VKD3DSIH_DTOF ] = "dtof",
[VKD3DSIH_DTOI ] = "dtoi",
[VKD3DSIH_DTOU ] = "dtou",
[VKD3DSIH_ELSE ] = "else",
[VKD3DSIH_EMIT ] = "emit",
[VKD3DSIH_EMIT_STREAM ] = "emit_stream",
[VKD3DSIH_ENDIF ] = "endif",
[VKD3DSIH_ENDLOOP ] = "endloop",
[VKD3DSIH_ENDREP ] = "endrep",
[VKD3DSIH_ENDSWITCH ] = "endswitch",
[VKD3DSIH_EQO ] = "eq",
[VKD3DSIH_EQU ] = "eq_unord",
[VKD3DSIH_EVAL_CENTROID ] = "eval_centroid",
[VKD3DSIH_EVAL_SAMPLE_INDEX ] = "eval_sample_index",
[VKD3DSIH_EXP ] = "exp",
[VKD3DSIH_EXPP ] = "expp",
[VKD3DSIH_F16TOF32 ] = "f16tof32",
[VKD3DSIH_F32TOF16 ] = "f32tof16",
[VKD3DSIH_FCALL ] = "fcall",
[VKD3DSIH_FIRSTBIT_HI ] = "firstbit_hi",
[VKD3DSIH_FIRSTBIT_LO ] = "firstbit_lo",
[VKD3DSIH_FIRSTBIT_SHI ] = "firstbit_shi",
[VKD3DSIH_FRC ] = "frc",
[VKD3DSIH_FREM ] = "frem",
[VKD3DSIH_FTOD ] = "ftod",
[VKD3DSIH_FTOI ] = "ftoi",
[VKD3DSIH_FTOU ] = "ftou",
[VKD3DSIH_GATHER4 ] = "gather4",
[VKD3DSIH_GATHER4_C ] = "gather4_c",
[VKD3DSIH_GATHER4_C_S ] = "gather4_c_s",
[VKD3DSIH_GATHER4_PO ] = "gather4_po",
[VKD3DSIH_GATHER4_PO_C ] = "gather4_po_c",
[VKD3DSIH_GATHER4_PO_C_S ] = "gather4_po_c_s",
[VKD3DSIH_GATHER4_PO_S ] = "gather4_po_s",
[VKD3DSIH_GATHER4_S ] = "gather4_s",
[VKD3DSIH_GEO ] = "ge",
[VKD3DSIH_GEU ] = "ge_unord",
[VKD3DSIH_HCOS ] = "hcos",
[VKD3DSIH_HS_CONTROL_POINT_PHASE ] = "hs_control_point_phase",
[VKD3DSIH_HS_DECLS ] = "hs_decls",
[VKD3DSIH_HS_FORK_PHASE ] = "hs_fork_phase",
[VKD3DSIH_HS_JOIN_PHASE ] = "hs_join_phase",
[VKD3DSIH_HSIN ] = "hsin",
[VKD3DSIH_HTAN ] = "htan",
[VKD3DSIH_IADD ] = "iadd",
[VKD3DSIH_IBFE ] = "ibfe",
[VKD3DSIH_IDIV ] = "idiv",
[VKD3DSIH_IEQ ] = "ieq",
[VKD3DSIH_IF ] = "if",
[VKD3DSIH_IFC ] = "if",
[VKD3DSIH_IGE ] = "ige",
[VKD3DSIH_ILT ] = "ilt",
[VKD3DSIH_IMAD ] = "imad",
[VKD3DSIH_IMAX ] = "imax",
[VKD3DSIH_IMIN ] = "imin",
[VKD3DSIH_IMM_ATOMIC_ALLOC ] = "imm_atomic_alloc",
[VKD3DSIH_IMM_ATOMIC_AND ] = "imm_atomic_and",
[VKD3DSIH_IMM_ATOMIC_CMP_EXCH ] = "imm_atomic_cmp_exch",
[VKD3DSIH_IMM_ATOMIC_CONSUME ] = "imm_atomic_consume",
[VKD3DSIH_IMM_ATOMIC_EXCH ] = "imm_atomic_exch",
[VKD3DSIH_IMM_ATOMIC_IADD ] = "imm_atomic_iadd",
[VKD3DSIH_IMM_ATOMIC_IMAX ] = "imm_atomic_imax",
[VKD3DSIH_IMM_ATOMIC_IMIN ] = "imm_atomic_imin",
[VKD3DSIH_IMM_ATOMIC_OR ] = "imm_atomic_or",
[VKD3DSIH_IMM_ATOMIC_UMAX ] = "imm_atomic_umax",
[VKD3DSIH_IMM_ATOMIC_UMIN ] = "imm_atomic_umin",
[VKD3DSIH_IMM_ATOMIC_XOR ] = "imm_atomic_xor",
[VKD3DSIH_IMUL ] = "imul",
[VKD3DSIH_INE ] = "ine",
[VKD3DSIH_INEG ] = "ineg",
[VKD3DSIH_ISFINITE ] = "isfinite",
[VKD3DSIH_ISHL ] = "ishl",
[VKD3DSIH_ISHR ] = "ishr",
[VKD3DSIH_ISINF ] = "isinf",
[VKD3DSIH_ISNAN ] = "isnan",
[VKD3DSIH_ITOD ] = "itod",
[VKD3DSIH_ITOF ] = "itof",
[VKD3DSIH_ITOI ] = "itoi",
[VKD3DSIH_LABEL ] = "label",
[VKD3DSIH_LD ] = "ld",
[VKD3DSIH_LD2DMS ] = "ld2dms",
[VKD3DSIH_LD2DMS_S ] = "ld2dms_s",
[VKD3DSIH_LD_RAW ] = "ld_raw",
[VKD3DSIH_LD_RAW_S ] = "ld_raw_s",
[VKD3DSIH_LD_S ] = "ld_s",
[VKD3DSIH_LD_STRUCTURED ] = "ld_structured",
[VKD3DSIH_LD_STRUCTURED_S ] = "ld_structured_s",
[VKD3DSIH_LD_UAV_TYPED ] = "ld_uav_typed",
[VKD3DSIH_LD_UAV_TYPED_S ] = "ld_uav_typed_s",
[VKD3DSIH_LIT ] = "lit",
[VKD3DSIH_LOD ] = "lod",
[VKD3DSIH_LOG ] = "log",
[VKD3DSIH_LOGP ] = "logp",
[VKD3DSIH_LOOP ] = "loop",
[VKD3DSIH_LRP ] = "lrp",
[VKD3DSIH_LTO ] = "lt",
[VKD3DSIH_LTU ] = "lt_unord",
[VKD3DSIH_M3x2 ] = "m3x2",
[VKD3DSIH_M3x3 ] = "m3x3",
[VKD3DSIH_M3x4 ] = "m3x4",
[VKD3DSIH_M4x3 ] = "m4x3",
[VKD3DSIH_M4x4 ] = "m4x4",
[VKD3DSIH_MAD ] = "mad",
[VKD3DSIH_MAX ] = "max",
[VKD3DSIH_MIN ] = "min",
[VKD3DSIH_MOV ] = "mov",
[VKD3DSIH_MOVA ] = "mova",
[VKD3DSIH_MOVC ] = "movc",
[VKD3DSIH_MSAD ] = "msad",
[VKD3DSIH_MUL ] = "mul",
[VKD3DSIH_NEO ] = "ne_ord",
[VKD3DSIH_NEU ] = "ne",
[VKD3DSIH_NOP ] = "nop",
[VKD3DSIH_NOT ] = "not",
[VKD3DSIH_NRM ] = "nrm",
[VKD3DSIH_OR ] = "or",
[VKD3DSIH_ORD ] = "ord",
[VKD3DSIH_PHASE ] = "phase",
[VKD3DSIH_PHI ] = "phi",
[VKD3DSIH_POW ] = "pow",
[VKD3DSIH_QUAD_READ_ACROSS_D ] = "quad_read_across_d",
[VKD3DSIH_QUAD_READ_ACROSS_X ] = "quad_read_across_x",
[VKD3DSIH_QUAD_READ_ACROSS_Y ] = "quad_read_across_y",
[VKD3DSIH_QUAD_READ_LANE_AT ] = "quad_read_lane_at",
[VKD3DSIH_RCP ] = "rcp",
[VKD3DSIH_REP ] = "rep",
[VKD3DSIH_RESINFO ] = "resinfo",
[VKD3DSIH_RET ] = "ret",
[VKD3DSIH_RETP ] = "retp",
[VKD3DSIH_ROUND_NE ] = "round_ne",
[VKD3DSIH_ROUND_NI ] = "round_ni",
[VKD3DSIH_ROUND_PI ] = "round_pi",
[VKD3DSIH_ROUND_Z ] = "round_z",
[VKD3DSIH_RSQ ] = "rsq",
[VKD3DSIH_SAMPLE ] = "sample",
[VKD3DSIH_SAMPLE_B ] = "sample_b",
[VKD3DSIH_SAMPLE_B_CL_S ] = "sample_b_cl_s",
[VKD3DSIH_SAMPLE_C ] = "sample_c",
[VKD3DSIH_SAMPLE_C_CL_S ] = "sample_c_cl_s",
[VKD3DSIH_SAMPLE_C_LZ ] = "sample_c_lz",
[VKD3DSIH_SAMPLE_C_LZ_S ] = "sample_c_lz_s",
[VKD3DSIH_SAMPLE_CL_S ] = "sample_cl_s",
[VKD3DSIH_SAMPLE_GRAD ] = "sample_d",
[VKD3DSIH_SAMPLE_GRAD_CL_S ] = "sample_d_cl_s",
[VKD3DSIH_SAMPLE_INFO ] = "sample_info",
[VKD3DSIH_SAMPLE_LOD ] = "sample_l",
[VKD3DSIH_SAMPLE_LOD_S ] = "sample_l_s",
[VKD3DSIH_SAMPLE_POS ] = "sample_pos",
[VKD3DSIH_SETP ] = "setp",
[VKD3DSIH_SGE ] = "sge",
[VKD3DSIH_SGN ] = "sgn",
[VKD3DSIH_SINCOS ] = "sincos",
[VKD3DSIH_SLT ] = "slt",
[VKD3DSIH_SQRT ] = "sqrt",
[VKD3DSIH_STORE_RAW ] = "store_raw",
[VKD3DSIH_STORE_STRUCTURED ] = "store_structured",
[VKD3DSIH_STORE_UAV_TYPED ] = "store_uav_typed",
[VKD3DSIH_SUB ] = "sub",
[VKD3DSIH_SWAPC ] = "swapc",
[VKD3DSIH_SWITCH ] = "switch",
[VKD3DSIH_SWITCH_MONOLITHIC ] = "switch",
[VKD3DSIH_SYNC ] = "sync",
[VKD3DSIH_TAN ] = "tan",
[VKD3DSIH_TEX ] = "tex",
[VKD3DSIH_TEXBEM ] = "texbem",
[VKD3DSIH_TEXBEML ] = "texbeml",
[VKD3DSIH_TEXCOORD ] = "texcoord",
[VKD3DSIH_TEXCRD ] = "texcrd",
[VKD3DSIH_TEXDEPTH ] = "texdepth",
[VKD3DSIH_TEXDP3 ] = "texdp3",
[VKD3DSIH_TEXDP3TEX ] = "texdp3tex",
[VKD3DSIH_TEXKILL ] = "texkill",
[VKD3DSIH_TEXLD ] = "texld",
[VKD3DSIH_TEXLDD ] = "texldd",
[VKD3DSIH_TEXLDL ] = "texldl",
[VKD3DSIH_TEXM3x2DEPTH ] = "texm3x2depth",
[VKD3DSIH_TEXM3x2PAD ] = "texm3x2pad",
[VKD3DSIH_TEXM3x2TEX ] = "texm3x2tex",
[VKD3DSIH_TEXM3x3 ] = "texm3x3",
[VKD3DSIH_TEXM3x3DIFF ] = "texm3x3diff",
[VKD3DSIH_TEXM3x3PAD ] = "texm3x3pad",
[VKD3DSIH_TEXM3x3SPEC ] = "texm3x3spec",
[VKD3DSIH_TEXM3x3TEX ] = "texm3x3tex",
[VKD3DSIH_TEXM3x3VSPEC ] = "texm3x3vspec",
[VKD3DSIH_TEXREG2AR ] = "texreg2ar",
[VKD3DSIH_TEXREG2GB ] = "texreg2gb",
[VKD3DSIH_TEXREG2RGB ] = "texreg2rgb",
[VKD3DSIH_UBFE ] = "ubfe",
[VKD3DSIH_UDIV ] = "udiv",
[VKD3DSIH_UGE ] = "uge",
[VKD3DSIH_ULT ] = "ult",
[VKD3DSIH_UMAX ] = "umax",
[VKD3DSIH_UMIN ] = "umin",
[VKD3DSIH_UMUL ] = "umul",
[VKD3DSIH_UNO ] = "uno",
[VKD3DSIH_USHR ] = "ushr",
[VKD3DSIH_UTOD ] = "utod",
[VKD3DSIH_UTOF ] = "utof",
[VKD3DSIH_UTOU ] = "utou",
[VKD3DSIH_WAVE_ACTIVE_ALL_EQUAL ] = "wave_active_all_equal",
[VKD3DSIH_WAVE_ACTIVE_BALLOT ] = "wave_active_ballot",
[VKD3DSIH_WAVE_ACTIVE_BIT_AND ] = "wave_active_bit_and",
[VKD3DSIH_WAVE_ACTIVE_BIT_OR ] = "wave_active_bit_or",
[VKD3DSIH_WAVE_ACTIVE_BIT_XOR ] = "wave_active_bit_xor",
[VKD3DSIH_WAVE_ALL_BIT_COUNT ] = "wave_all_bit_count",
[VKD3DSIH_WAVE_ALL_TRUE ] = "wave_all_true",
[VKD3DSIH_WAVE_ANY_TRUE ] = "wave_any_true",
[VKD3DSIH_WAVE_IS_FIRST_LANE ] = "wave_is_first_lane",
[VKD3DSIH_WAVE_OP_ADD ] = "wave_op_add",
[VKD3DSIH_WAVE_OP_IMAX ] = "wave_op_imax",
[VKD3DSIH_WAVE_OP_IMIN ] = "wave_op_imin",
[VKD3DSIH_WAVE_OP_MAX ] = "wave_op_max",
[VKD3DSIH_WAVE_OP_MIN ] = "wave_op_min",
[VKD3DSIH_WAVE_OP_MUL ] = "wave_op_mul",
[VKD3DSIH_WAVE_OP_UMAX ] = "wave_op_umax",
[VKD3DSIH_WAVE_OP_UMIN ] = "wave_op_umin",
[VKD3DSIH_WAVE_PREFIX_BIT_COUNT ] = "wave_prefix_bit_count",
[VKD3DSIH_WAVE_READ_LANE_AT ] = "wave_read_lane_at",
[VKD3DSIH_WAVE_READ_LANE_FIRST ] = "wave_read_lane_first",
[VKD3DSIH_XOR ] = "xor",
};
if ((uint32_t)op < ARRAY_SIZE(names))
return names[op] ? names[op] : error;
return error;
}
static int convert_parameter_info(const struct vkd3d_shader_compile_info *compile_info, static int convert_parameter_info(const struct vkd3d_shader_compile_info *compile_info,
unsigned int *ret_count, const struct vkd3d_shader_parameter1 **ret_parameters) unsigned int *ret_count, const struct vkd3d_shader_parameter1 **ret_parameters)
{ {

View File

@@ -612,6 +612,8 @@ enum vkd3d_shader_opcode
VKD3DSIH_COUNT, VKD3DSIH_COUNT,
}; };
const char *vsir_opcode_get_name(enum vkd3d_shader_opcode op, const char *error);
enum vkd3d_shader_register_type enum vkd3d_shader_register_type
{ {
VKD3DSPR_TEMP, VKD3DSPR_TEMP,