10b57cec5SDimitry Andric //===-- AMDGPUAsmUtils.cpp - AsmParser/InstPrinter common -----------------===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric #include "AMDGPUAsmUtils.h" 981ad6265SDimitry Andric #include "AMDGPUBaseInfo.h" 10e8d8bef9SDimitry Andric #include "SIDefines.h" 11e8d8bef9SDimitry Andric 12*0fca6ea1SDimitry Andric namespace llvm::AMDGPU { 13*0fca6ea1SDimitry Andric 14*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 15*0fca6ea1SDimitry Andric // Custom Operands. 16*0fca6ea1SDimitry Andric // 17*0fca6ea1SDimitry Andric // A table of custom operands shall describe "primary" operand names first 18*0fca6ea1SDimitry Andric // followed by aliases if any. It is not required but recommended to arrange 19*0fca6ea1SDimitry Andric // operands so that operand encoding match operand position in the table. This 20*0fca6ea1SDimitry Andric // will make getNameFromOperandTable() a bit more efficient. Unused slots in the 21*0fca6ea1SDimitry Andric // table shall have an empty name. 22*0fca6ea1SDimitry Andric // 23*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 24*0fca6ea1SDimitry Andric 25*0fca6ea1SDimitry Andric /// Map from the encoding of a sendmsg/hwreg asm operand to it's name. 26*0fca6ea1SDimitry Andric template <size_t N> 27*0fca6ea1SDimitry Andric static StringRef getNameFromOperandTable(const CustomOperand (&Table)[N], 28*0fca6ea1SDimitry Andric unsigned Encoding, 29*0fca6ea1SDimitry Andric const MCSubtargetInfo &STI) { 30*0fca6ea1SDimitry Andric auto isValidIndexForEncoding = [&](size_t Idx) { 31*0fca6ea1SDimitry Andric return Idx < N && Table[Idx].Encoding == Encoding && 32*0fca6ea1SDimitry Andric !Table[Idx].Name.empty() && 33*0fca6ea1SDimitry Andric (!Table[Idx].Cond || Table[Idx].Cond(STI)); 34*0fca6ea1SDimitry Andric }; 35*0fca6ea1SDimitry Andric 36*0fca6ea1SDimitry Andric // This is an optimization that should work in most cases. As a side effect, 37*0fca6ea1SDimitry Andric // it may cause selection of an alias instead of a primary operand name in 38*0fca6ea1SDimitry Andric // case of sparse tables. 39*0fca6ea1SDimitry Andric if (isValidIndexForEncoding(Encoding)) 40*0fca6ea1SDimitry Andric return Table[Encoding].Name; 41*0fca6ea1SDimitry Andric 42*0fca6ea1SDimitry Andric for (size_t Idx = 0; Idx != N; ++Idx) 43*0fca6ea1SDimitry Andric if (isValidIndexForEncoding(Idx)) 44*0fca6ea1SDimitry Andric return Table[Idx].Name; 45*0fca6ea1SDimitry Andric 46*0fca6ea1SDimitry Andric return ""; 47*0fca6ea1SDimitry Andric } 48*0fca6ea1SDimitry Andric 49*0fca6ea1SDimitry Andric /// Map from a symbolic name for a sendmsg/hwreg asm operand to it's encoding. 50*0fca6ea1SDimitry Andric template <size_t N> 51*0fca6ea1SDimitry Andric static int64_t getEncodingFromOperandTable(const CustomOperand (&Table)[N], 52*0fca6ea1SDimitry Andric StringRef Name, 53*0fca6ea1SDimitry Andric const MCSubtargetInfo &STI) { 54*0fca6ea1SDimitry Andric int64_t InvalidEncoding = OPR_ID_UNKNOWN; 55*0fca6ea1SDimitry Andric for (const CustomOperand &Entry : Table) { 56*0fca6ea1SDimitry Andric if (Entry.Name != Name) 57*0fca6ea1SDimitry Andric continue; 58*0fca6ea1SDimitry Andric 59*0fca6ea1SDimitry Andric if (!Entry.Cond || Entry.Cond(STI)) 60*0fca6ea1SDimitry Andric return Entry.Encoding; 61*0fca6ea1SDimitry Andric 62*0fca6ea1SDimitry Andric InvalidEncoding = OPR_ID_UNSUPPORTED; 63*0fca6ea1SDimitry Andric } 64*0fca6ea1SDimitry Andric 65*0fca6ea1SDimitry Andric return InvalidEncoding; 66*0fca6ea1SDimitry Andric } 6781ad6265SDimitry Andric 6881ad6265SDimitry Andric namespace DepCtr { 6981ad6265SDimitry Andric 7081ad6265SDimitry Andric // NOLINTBEGIN 7181ad6265SDimitry Andric const CustomOperandVal DepCtrInfo[] = { 7281ad6265SDimitry Andric // Name max dflt offset width constraint 7381ad6265SDimitry Andric {{"depctr_hold_cnt"}, 1, 1, 7, 1, isGFX10_BEncoding}, 7481ad6265SDimitry Andric {{"depctr_sa_sdst"}, 1, 1, 0, 1}, 7581ad6265SDimitry Andric {{"depctr_va_vdst"}, 15, 15, 12, 4}, 7681ad6265SDimitry Andric {{"depctr_va_sdst"}, 7, 7, 9, 3}, 7781ad6265SDimitry Andric {{"depctr_va_ssrc"}, 1, 1, 8, 1}, 7881ad6265SDimitry Andric {{"depctr_va_vcc"}, 1, 1, 1, 1}, 7981ad6265SDimitry Andric {{"depctr_vm_vsrc"}, 7, 7, 2, 3}, 8081ad6265SDimitry Andric }; 8181ad6265SDimitry Andric // NOLINTEND 8281ad6265SDimitry Andric 8381ad6265SDimitry Andric const int DEP_CTR_SIZE = 8481ad6265SDimitry Andric static_cast<int>(sizeof(DepCtrInfo) / sizeof(CustomOperandVal)); 8581ad6265SDimitry Andric 8681ad6265SDimitry Andric } // namespace DepCtr 8781ad6265SDimitry Andric 880b57cec5SDimitry Andric namespace SendMsg { 890b57cec5SDimitry Andric 90*0fca6ea1SDimitry Andric // Disable lint checking here since it makes these tables unreadable. 9181ad6265SDimitry Andric // NOLINTBEGIN 925f757f3fSDimitry Andric // clang-format off 93*0fca6ea1SDimitry Andric 94*0fca6ea1SDimitry Andric static constexpr CustomOperand MsgOperands[] = { 9581ad6265SDimitry Andric {{""}}, 9681ad6265SDimitry Andric {{"MSG_INTERRUPT"}, ID_INTERRUPT}, 9781ad6265SDimitry Andric {{"MSG_GS"}, ID_GS_PreGFX11, isNotGFX11Plus}, 9881ad6265SDimitry Andric {{"MSG_GS_DONE"}, ID_GS_DONE_PreGFX11, isNotGFX11Plus}, 9981ad6265SDimitry Andric {{"MSG_SAVEWAVE"}, ID_SAVEWAVE, isGFX8_GFX9_GFX10}, 1005f757f3fSDimitry Andric {{"MSG_STALL_WAVE_GEN"}, ID_STALL_WAVE_GEN, isGFX9_GFX10_GFX11}, 1015f757f3fSDimitry Andric {{"MSG_HALT_WAVES"}, ID_HALT_WAVES, isGFX9_GFX10_GFX11}, 10206c3fb27SDimitry Andric {{"MSG_ORDERED_PS_DONE"}, ID_ORDERED_PS_DONE, isGFX9_GFX10}, 10381ad6265SDimitry Andric {{"MSG_EARLY_PRIM_DEALLOC"}, ID_EARLY_PRIM_DEALLOC, isGFX9_GFX10}, 10481ad6265SDimitry Andric {{"MSG_GS_ALLOC_REQ"}, ID_GS_ALLOC_REQ, isGFX9Plus}, 10581ad6265SDimitry Andric {{"MSG_GET_DOORBELL"}, ID_GET_DOORBELL, isGFX9_GFX10}, 10681ad6265SDimitry Andric {{"MSG_GET_DDID"}, ID_GET_DDID, isGFX10}, 10781ad6265SDimitry Andric {{"MSG_HS_TESSFACTOR"}, ID_HS_TESSFACTOR_GFX11Plus, isGFX11Plus}, 10881ad6265SDimitry Andric {{"MSG_DEALLOC_VGPRS"}, ID_DEALLOC_VGPRS_GFX11Plus, isGFX11Plus}, 10981ad6265SDimitry Andric {{""}}, 11081ad6265SDimitry Andric {{"MSG_SYSMSG"}, ID_SYSMSG}, 11181ad6265SDimitry Andric {{"MSG_RTN_GET_DOORBELL"}, ID_RTN_GET_DOORBELL, isGFX11Plus}, 11281ad6265SDimitry Andric {{"MSG_RTN_GET_DDID"}, ID_RTN_GET_DDID, isGFX11Plus}, 11381ad6265SDimitry Andric {{"MSG_RTN_GET_TMA"}, ID_RTN_GET_TMA, isGFX11Plus}, 11481ad6265SDimitry Andric {{"MSG_RTN_GET_REALTIME"}, ID_RTN_GET_REALTIME, isGFX11Plus}, 11581ad6265SDimitry Andric {{"MSG_RTN_SAVE_WAVE"}, ID_RTN_SAVE_WAVE, isGFX11Plus}, 11681ad6265SDimitry Andric {{"MSG_RTN_GET_TBA"}, ID_RTN_GET_TBA, isGFX11Plus}, 117*0fca6ea1SDimitry Andric {{"MSG_RTN_GET_TBA_TO_PC"}, ID_RTN_GET_TBA_TO_PC, isGFX11Plus}, 1185f757f3fSDimitry Andric {{"MSG_RTN_GET_SE_AID_ID"}, ID_RTN_GET_SE_AID_ID, isGFX12Plus}, 1190b57cec5SDimitry Andric }; 120*0fca6ea1SDimitry Andric 121*0fca6ea1SDimitry Andric static constexpr CustomOperand SysMsgOperands[] = { 122*0fca6ea1SDimitry Andric {{""}}, 123*0fca6ea1SDimitry Andric {{"SYSMSG_OP_ECC_ERR_INTERRUPT"}, OP_SYS_ECC_ERR_INTERRUPT}, 124*0fca6ea1SDimitry Andric {{"SYSMSG_OP_REG_RD"}, OP_SYS_REG_RD}, 125*0fca6ea1SDimitry Andric {{"SYSMSG_OP_HOST_TRAP_ACK"}, OP_SYS_HOST_TRAP_ACK, isNotGFX9Plus}, 126*0fca6ea1SDimitry Andric {{"SYSMSG_OP_TTRACE_PC"}, OP_SYS_TTRACE_PC}, 127*0fca6ea1SDimitry Andric }; 128*0fca6ea1SDimitry Andric 129*0fca6ea1SDimitry Andric static constexpr CustomOperand StreamMsgOperands[] = { 130*0fca6ea1SDimitry Andric {{"GS_OP_NOP"}, OP_GS_NOP}, 131*0fca6ea1SDimitry Andric {{"GS_OP_CUT"}, OP_GS_CUT}, 132*0fca6ea1SDimitry Andric {{"GS_OP_EMIT"}, OP_GS_EMIT}, 133*0fca6ea1SDimitry Andric {{"GS_OP_EMIT_CUT"}, OP_GS_EMIT_CUT}, 134*0fca6ea1SDimitry Andric }; 135*0fca6ea1SDimitry Andric 1365f757f3fSDimitry Andric // clang-format on 13781ad6265SDimitry Andric // NOLINTEND 13881ad6265SDimitry Andric 139*0fca6ea1SDimitry Andric int64_t getMsgId(StringRef Name, const MCSubtargetInfo &STI) { 140*0fca6ea1SDimitry Andric return getEncodingFromOperandTable(MsgOperands, Name, STI); 141*0fca6ea1SDimitry Andric } 1420b57cec5SDimitry Andric 143*0fca6ea1SDimitry Andric StringRef getMsgName(uint64_t Encoding, const MCSubtargetInfo &STI) { 144*0fca6ea1SDimitry Andric return getNameFromOperandTable(MsgOperands, Encoding, STI); 145*0fca6ea1SDimitry Andric } 1460b57cec5SDimitry Andric 147*0fca6ea1SDimitry Andric int64_t getMsgOpId(int64_t MsgId, StringRef Name, const MCSubtargetInfo &STI) { 148*0fca6ea1SDimitry Andric if (MsgId == ID_SYSMSG) 149*0fca6ea1SDimitry Andric return getEncodingFromOperandTable(SysMsgOperands, Name, STI); 150*0fca6ea1SDimitry Andric return getEncodingFromOperandTable(StreamMsgOperands, Name, STI); 151*0fca6ea1SDimitry Andric } 152*0fca6ea1SDimitry Andric 153*0fca6ea1SDimitry Andric StringRef getMsgOpName(int64_t MsgId, uint64_t Encoding, 154*0fca6ea1SDimitry Andric const MCSubtargetInfo &STI) { 155*0fca6ea1SDimitry Andric assert(msgRequiresOp(MsgId, STI) && "must have an operand"); 156*0fca6ea1SDimitry Andric 157*0fca6ea1SDimitry Andric if (MsgId == ID_SYSMSG) 158*0fca6ea1SDimitry Andric return getNameFromOperandTable(SysMsgOperands, Encoding, STI); 159*0fca6ea1SDimitry Andric return getNameFromOperandTable(StreamMsgOperands, Encoding, STI); 160*0fca6ea1SDimitry Andric } 1610b57cec5SDimitry Andric 1620b57cec5SDimitry Andric } // namespace SendMsg 1630b57cec5SDimitry Andric 1640b57cec5SDimitry Andric namespace Hwreg { 1650b57cec5SDimitry Andric 16681ad6265SDimitry Andric // Disable lint checking for this block since it makes the table unreadable. 16781ad6265SDimitry Andric // NOLINTBEGIN 1685f757f3fSDimitry Andric // clang-format off 169*0fca6ea1SDimitry Andric static constexpr CustomOperand Operands[] = { 17081ad6265SDimitry Andric {{""}}, 17181ad6265SDimitry Andric {{"HW_REG_MODE"}, ID_MODE}, 17281ad6265SDimitry Andric {{"HW_REG_STATUS"}, ID_STATUS}, 1735f757f3fSDimitry Andric {{"HW_REG_TRAPSTS"}, ID_TRAPSTS, isNotGFX12Plus}, 17481ad6265SDimitry Andric {{"HW_REG_HW_ID"}, ID_HW_ID, isNotGFX10Plus}, 17581ad6265SDimitry Andric {{"HW_REG_GPR_ALLOC"}, ID_GPR_ALLOC}, 17681ad6265SDimitry Andric {{"HW_REG_LDS_ALLOC"}, ID_LDS_ALLOC}, 17781ad6265SDimitry Andric {{"HW_REG_IB_STS"}, ID_IB_STS}, 17881ad6265SDimitry Andric {{""}}, 17981ad6265SDimitry Andric {{""}}, 1805f757f3fSDimitry Andric {{"HW_REG_PERF_SNAPSHOT_DATA"}, ID_PERF_SNAPSHOT_DATA_gfx12, isGFX12Plus}, 1815f757f3fSDimitry Andric {{"HW_REG_PERF_SNAPSHOT_PC_LO"}, ID_PERF_SNAPSHOT_PC_LO_gfx12, isGFX12Plus}, 1825f757f3fSDimitry Andric {{"HW_REG_PERF_SNAPSHOT_PC_HI"}, ID_PERF_SNAPSHOT_PC_HI_gfx12, isGFX12Plus}, 18381ad6265SDimitry Andric {{""}}, 18481ad6265SDimitry Andric {{""}}, 1855f757f3fSDimitry Andric {{"HW_REG_SH_MEM_BASES"}, ID_MEM_BASES, isGFX9_GFX10_GFX11}, 18681ad6265SDimitry Andric {{"HW_REG_TBA_LO"}, ID_TBA_LO, isGFX9_GFX10}, 18781ad6265SDimitry Andric {{"HW_REG_TBA_HI"}, ID_TBA_HI, isGFX9_GFX10}, 18881ad6265SDimitry Andric {{"HW_REG_TMA_LO"}, ID_TMA_LO, isGFX9_GFX10}, 18981ad6265SDimitry Andric {{"HW_REG_TMA_HI"}, ID_TMA_HI, isGFX9_GFX10}, 1905f757f3fSDimitry Andric {{"HW_REG_FLAT_SCR_LO"}, ID_FLAT_SCR_LO, isGFX10_GFX11}, 1915f757f3fSDimitry Andric {{"HW_REG_FLAT_SCR_HI"}, ID_FLAT_SCR_HI, isGFX10_GFX11}, 19281ad6265SDimitry Andric {{"HW_REG_XNACK_MASK"}, ID_XNACK_MASK, isGFX10Before1030}, 19381ad6265SDimitry Andric {{"HW_REG_HW_ID1"}, ID_HW_ID1, isGFX10Plus}, 19481ad6265SDimitry Andric {{"HW_REG_HW_ID2"}, ID_HW_ID2, isGFX10Plus}, 19581ad6265SDimitry Andric {{"HW_REG_POPS_PACKER"}, ID_POPS_PACKER, isGFX10}, 19681ad6265SDimitry Andric {{""}}, 1975f757f3fSDimitry Andric {{"HW_REG_PERF_SNAPSHOT_DATA"}, ID_PERF_SNAPSHOT_DATA_gfx11, isGFX11}, 19881ad6265SDimitry Andric {{""}}, 1995f757f3fSDimitry Andric {{"HW_REG_SHADER_CYCLES"}, ID_SHADER_CYCLES, isGFX10_3_GFX11}, 2005f757f3fSDimitry Andric {{"HW_REG_SHADER_CYCLES_HI"}, ID_SHADER_CYCLES_HI, isGFX12Plus}, 2015f757f3fSDimitry Andric {{"HW_REG_DVGPR_ALLOC_LO"}, ID_DVGPR_ALLOC_LO, isGFX12Plus}, 2025f757f3fSDimitry Andric {{"HW_REG_DVGPR_ALLOC_HI"}, ID_DVGPR_ALLOC_HI, isGFX12Plus}, 20381ad6265SDimitry Andric 2045f757f3fSDimitry Andric // Register numbers reused in GFX11 2055f757f3fSDimitry Andric {{"HW_REG_PERF_SNAPSHOT_PC_LO"}, ID_PERF_SNAPSHOT_PC_LO_gfx11, isGFX11}, 2065f757f3fSDimitry Andric {{"HW_REG_PERF_SNAPSHOT_PC_HI"}, ID_PERF_SNAPSHOT_PC_HI_gfx11, isGFX11}, 2075f757f3fSDimitry Andric 2085f757f3fSDimitry Andric // Register numbers reused in GFX12+ 2095f757f3fSDimitry Andric {{"HW_REG_STATE_PRIV"}, ID_STATE_PRIV, isGFX12Plus}, 2105f757f3fSDimitry Andric {{"HW_REG_PERF_SNAPSHOT_DATA1"}, ID_PERF_SNAPSHOT_DATA1, isGFX12Plus}, 2115f757f3fSDimitry Andric {{"HW_REG_PERF_SNAPSHOT_DATA2"}, ID_PERF_SNAPSHOT_DATA2, isGFX12Plus}, 2125f757f3fSDimitry Andric {{"HW_REG_EXCP_FLAG_PRIV"}, ID_EXCP_FLAG_PRIV, isGFX12Plus}, 2135f757f3fSDimitry Andric {{"HW_REG_EXCP_FLAG_USER"}, ID_EXCP_FLAG_USER, isGFX12Plus}, 2145f757f3fSDimitry Andric {{"HW_REG_TRAP_CTRL"}, ID_TRAP_CTRL, isGFX12Plus}, 2155f757f3fSDimitry Andric {{"HW_REG_SCRATCH_BASE_LO"}, ID_FLAT_SCR_LO, isGFX12Plus}, 2165f757f3fSDimitry Andric {{"HW_REG_SCRATCH_BASE_HI"}, ID_FLAT_SCR_HI, isGFX12Plus}, 2175f757f3fSDimitry Andric {{"HW_REG_SHADER_CYCLES_LO"}, ID_SHADER_CYCLES, isGFX12Plus}, 21806c3fb27SDimitry Andric 21981ad6265SDimitry Andric // GFX940 specific registers 22081ad6265SDimitry Andric {{"HW_REG_XCC_ID"}, ID_XCC_ID, isGFX940}, 22181ad6265SDimitry Andric {{"HW_REG_SQ_PERF_SNAPSHOT_DATA"}, ID_SQ_PERF_SNAPSHOT_DATA, isGFX940}, 22281ad6265SDimitry Andric {{"HW_REG_SQ_PERF_SNAPSHOT_DATA1"}, ID_SQ_PERF_SNAPSHOT_DATA1, isGFX940}, 22381ad6265SDimitry Andric {{"HW_REG_SQ_PERF_SNAPSHOT_PC_LO"}, ID_SQ_PERF_SNAPSHOT_PC_LO, isGFX940}, 22481ad6265SDimitry Andric {{"HW_REG_SQ_PERF_SNAPSHOT_PC_HI"}, ID_SQ_PERF_SNAPSHOT_PC_HI, isGFX940}, 22581ad6265SDimitry Andric 22681ad6265SDimitry Andric // Aliases 22781ad6265SDimitry Andric {{"HW_REG_HW_ID"}, ID_HW_ID1, isGFX10}, 2280b57cec5SDimitry Andric }; 2295f757f3fSDimitry Andric // clang-format on 23081ad6265SDimitry Andric // NOLINTEND 23181ad6265SDimitry Andric 232*0fca6ea1SDimitry Andric int64_t getHwregId(StringRef Name, const MCSubtargetInfo &STI) { 233*0fca6ea1SDimitry Andric return getEncodingFromOperandTable(Operands, Name, STI); 234*0fca6ea1SDimitry Andric } 235*0fca6ea1SDimitry Andric 236*0fca6ea1SDimitry Andric StringRef getHwreg(uint64_t Encoding, const MCSubtargetInfo &STI) { 237*0fca6ea1SDimitry Andric return getNameFromOperandTable(Operands, Encoding, STI); 238*0fca6ea1SDimitry Andric } 2390b57cec5SDimitry Andric 2400b57cec5SDimitry Andric } // namespace Hwreg 2410b57cec5SDimitry Andric 242e8d8bef9SDimitry Andric namespace MTBUFFormat { 243e8d8bef9SDimitry Andric 244e8d8bef9SDimitry Andric StringLiteral const DfmtSymbolic[] = { 245e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_INVALID", 246e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_8", 247e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_16", 248e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_8_8", 249e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_32", 250e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_16_16", 251e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_10_11_11", 252e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_11_11_10", 253e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_10_10_10_2", 254e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_2_10_10_10", 255e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_8_8_8_8", 256e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_32_32", 257e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_16_16_16_16", 258e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_32_32_32", 259e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_32_32_32_32", 260e8d8bef9SDimitry Andric "BUF_DATA_FORMAT_RESERVED_15" 261e8d8bef9SDimitry Andric }; 262e8d8bef9SDimitry Andric 263e8d8bef9SDimitry Andric StringLiteral const NfmtSymbolicGFX10[] = { 264e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_UNORM", 265e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_SNORM", 266e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_USCALED", 267e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_SSCALED", 268e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_UINT", 269e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_SINT", 270e8d8bef9SDimitry Andric "", 271e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_FLOAT" 272e8d8bef9SDimitry Andric }; 273e8d8bef9SDimitry Andric 274e8d8bef9SDimitry Andric StringLiteral const NfmtSymbolicSICI[] = { 275e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_UNORM", 276e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_SNORM", 277e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_USCALED", 278e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_SSCALED", 279e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_UINT", 280e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_SINT", 281e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_SNORM_OGL", 282e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_FLOAT" 283e8d8bef9SDimitry Andric }; 284e8d8bef9SDimitry Andric 285e8d8bef9SDimitry Andric StringLiteral const NfmtSymbolicVI[] = { // VI and GFX9 286e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_UNORM", 287e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_SNORM", 288e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_USCALED", 289e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_SSCALED", 290e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_UINT", 291e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_SINT", 292e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_RESERVED_6", 293e8d8bef9SDimitry Andric "BUF_NUM_FORMAT_FLOAT" 294e8d8bef9SDimitry Andric }; 295e8d8bef9SDimitry Andric 29681ad6265SDimitry Andric StringLiteral const UfmtSymbolicGFX10[] = { 297e8d8bef9SDimitry Andric "BUF_FMT_INVALID", 298e8d8bef9SDimitry Andric 299e8d8bef9SDimitry Andric "BUF_FMT_8_UNORM", 300e8d8bef9SDimitry Andric "BUF_FMT_8_SNORM", 301e8d8bef9SDimitry Andric "BUF_FMT_8_USCALED", 302e8d8bef9SDimitry Andric "BUF_FMT_8_SSCALED", 303e8d8bef9SDimitry Andric "BUF_FMT_8_UINT", 304e8d8bef9SDimitry Andric "BUF_FMT_8_SINT", 305e8d8bef9SDimitry Andric 306e8d8bef9SDimitry Andric "BUF_FMT_16_UNORM", 307e8d8bef9SDimitry Andric "BUF_FMT_16_SNORM", 308e8d8bef9SDimitry Andric "BUF_FMT_16_USCALED", 309e8d8bef9SDimitry Andric "BUF_FMT_16_SSCALED", 310e8d8bef9SDimitry Andric "BUF_FMT_16_UINT", 311e8d8bef9SDimitry Andric "BUF_FMT_16_SINT", 312e8d8bef9SDimitry Andric "BUF_FMT_16_FLOAT", 313e8d8bef9SDimitry Andric 314e8d8bef9SDimitry Andric "BUF_FMT_8_8_UNORM", 315e8d8bef9SDimitry Andric "BUF_FMT_8_8_SNORM", 316e8d8bef9SDimitry Andric "BUF_FMT_8_8_USCALED", 317e8d8bef9SDimitry Andric "BUF_FMT_8_8_SSCALED", 318e8d8bef9SDimitry Andric "BUF_FMT_8_8_UINT", 319e8d8bef9SDimitry Andric "BUF_FMT_8_8_SINT", 320e8d8bef9SDimitry Andric 321e8d8bef9SDimitry Andric "BUF_FMT_32_UINT", 322e8d8bef9SDimitry Andric "BUF_FMT_32_SINT", 323e8d8bef9SDimitry Andric "BUF_FMT_32_FLOAT", 324e8d8bef9SDimitry Andric 325e8d8bef9SDimitry Andric "BUF_FMT_16_16_UNORM", 326e8d8bef9SDimitry Andric "BUF_FMT_16_16_SNORM", 327e8d8bef9SDimitry Andric "BUF_FMT_16_16_USCALED", 328e8d8bef9SDimitry Andric "BUF_FMT_16_16_SSCALED", 329e8d8bef9SDimitry Andric "BUF_FMT_16_16_UINT", 330e8d8bef9SDimitry Andric "BUF_FMT_16_16_SINT", 331e8d8bef9SDimitry Andric "BUF_FMT_16_16_FLOAT", 332e8d8bef9SDimitry Andric 333e8d8bef9SDimitry Andric "BUF_FMT_10_11_11_UNORM", 334e8d8bef9SDimitry Andric "BUF_FMT_10_11_11_SNORM", 335e8d8bef9SDimitry Andric "BUF_FMT_10_11_11_USCALED", 336e8d8bef9SDimitry Andric "BUF_FMT_10_11_11_SSCALED", 337e8d8bef9SDimitry Andric "BUF_FMT_10_11_11_UINT", 338e8d8bef9SDimitry Andric "BUF_FMT_10_11_11_SINT", 339e8d8bef9SDimitry Andric "BUF_FMT_10_11_11_FLOAT", 340e8d8bef9SDimitry Andric 341e8d8bef9SDimitry Andric "BUF_FMT_11_11_10_UNORM", 342e8d8bef9SDimitry Andric "BUF_FMT_11_11_10_SNORM", 343e8d8bef9SDimitry Andric "BUF_FMT_11_11_10_USCALED", 344e8d8bef9SDimitry Andric "BUF_FMT_11_11_10_SSCALED", 345e8d8bef9SDimitry Andric "BUF_FMT_11_11_10_UINT", 346e8d8bef9SDimitry Andric "BUF_FMT_11_11_10_SINT", 347e8d8bef9SDimitry Andric "BUF_FMT_11_11_10_FLOAT", 348e8d8bef9SDimitry Andric 349e8d8bef9SDimitry Andric "BUF_FMT_10_10_10_2_UNORM", 350e8d8bef9SDimitry Andric "BUF_FMT_10_10_10_2_SNORM", 351e8d8bef9SDimitry Andric "BUF_FMT_10_10_10_2_USCALED", 352e8d8bef9SDimitry Andric "BUF_FMT_10_10_10_2_SSCALED", 353e8d8bef9SDimitry Andric "BUF_FMT_10_10_10_2_UINT", 354e8d8bef9SDimitry Andric "BUF_FMT_10_10_10_2_SINT", 355e8d8bef9SDimitry Andric 356e8d8bef9SDimitry Andric "BUF_FMT_2_10_10_10_UNORM", 357e8d8bef9SDimitry Andric "BUF_FMT_2_10_10_10_SNORM", 358e8d8bef9SDimitry Andric "BUF_FMT_2_10_10_10_USCALED", 359e8d8bef9SDimitry Andric "BUF_FMT_2_10_10_10_SSCALED", 360e8d8bef9SDimitry Andric "BUF_FMT_2_10_10_10_UINT", 361e8d8bef9SDimitry Andric "BUF_FMT_2_10_10_10_SINT", 362e8d8bef9SDimitry Andric 363e8d8bef9SDimitry Andric "BUF_FMT_8_8_8_8_UNORM", 364e8d8bef9SDimitry Andric "BUF_FMT_8_8_8_8_SNORM", 365e8d8bef9SDimitry Andric "BUF_FMT_8_8_8_8_USCALED", 366e8d8bef9SDimitry Andric "BUF_FMT_8_8_8_8_SSCALED", 367e8d8bef9SDimitry Andric "BUF_FMT_8_8_8_8_UINT", 368e8d8bef9SDimitry Andric "BUF_FMT_8_8_8_8_SINT", 369e8d8bef9SDimitry Andric 370e8d8bef9SDimitry Andric "BUF_FMT_32_32_UINT", 371e8d8bef9SDimitry Andric "BUF_FMT_32_32_SINT", 372e8d8bef9SDimitry Andric "BUF_FMT_32_32_FLOAT", 373e8d8bef9SDimitry Andric 374e8d8bef9SDimitry Andric "BUF_FMT_16_16_16_16_UNORM", 375e8d8bef9SDimitry Andric "BUF_FMT_16_16_16_16_SNORM", 376e8d8bef9SDimitry Andric "BUF_FMT_16_16_16_16_USCALED", 377e8d8bef9SDimitry Andric "BUF_FMT_16_16_16_16_SSCALED", 378e8d8bef9SDimitry Andric "BUF_FMT_16_16_16_16_UINT", 379e8d8bef9SDimitry Andric "BUF_FMT_16_16_16_16_SINT", 380e8d8bef9SDimitry Andric "BUF_FMT_16_16_16_16_FLOAT", 381e8d8bef9SDimitry Andric 382e8d8bef9SDimitry Andric "BUF_FMT_32_32_32_UINT", 383e8d8bef9SDimitry Andric "BUF_FMT_32_32_32_SINT", 384e8d8bef9SDimitry Andric "BUF_FMT_32_32_32_FLOAT", 385e8d8bef9SDimitry Andric "BUF_FMT_32_32_32_32_UINT", 386e8d8bef9SDimitry Andric "BUF_FMT_32_32_32_32_SINT", 387e8d8bef9SDimitry Andric "BUF_FMT_32_32_32_32_FLOAT" 388e8d8bef9SDimitry Andric }; 389e8d8bef9SDimitry Andric 39081ad6265SDimitry Andric unsigned const DfmtNfmt2UFmtGFX10[] = { 391e8d8bef9SDimitry Andric DFMT_INVALID | (NFMT_UNORM << NFMT_SHIFT), 392e8d8bef9SDimitry Andric 393e8d8bef9SDimitry Andric DFMT_8 | (NFMT_UNORM << NFMT_SHIFT), 394e8d8bef9SDimitry Andric DFMT_8 | (NFMT_SNORM << NFMT_SHIFT), 395e8d8bef9SDimitry Andric DFMT_8 | (NFMT_USCALED << NFMT_SHIFT), 396e8d8bef9SDimitry Andric DFMT_8 | (NFMT_SSCALED << NFMT_SHIFT), 397e8d8bef9SDimitry Andric DFMT_8 | (NFMT_UINT << NFMT_SHIFT), 398e8d8bef9SDimitry Andric DFMT_8 | (NFMT_SINT << NFMT_SHIFT), 399e8d8bef9SDimitry Andric 400e8d8bef9SDimitry Andric DFMT_16 | (NFMT_UNORM << NFMT_SHIFT), 401e8d8bef9SDimitry Andric DFMT_16 | (NFMT_SNORM << NFMT_SHIFT), 402e8d8bef9SDimitry Andric DFMT_16 | (NFMT_USCALED << NFMT_SHIFT), 403e8d8bef9SDimitry Andric DFMT_16 | (NFMT_SSCALED << NFMT_SHIFT), 404e8d8bef9SDimitry Andric DFMT_16 | (NFMT_UINT << NFMT_SHIFT), 405e8d8bef9SDimitry Andric DFMT_16 | (NFMT_SINT << NFMT_SHIFT), 406e8d8bef9SDimitry Andric DFMT_16 | (NFMT_FLOAT << NFMT_SHIFT), 407e8d8bef9SDimitry Andric 408e8d8bef9SDimitry Andric DFMT_8_8 | (NFMT_UNORM << NFMT_SHIFT), 409e8d8bef9SDimitry Andric DFMT_8_8 | (NFMT_SNORM << NFMT_SHIFT), 410e8d8bef9SDimitry Andric DFMT_8_8 | (NFMT_USCALED << NFMT_SHIFT), 411e8d8bef9SDimitry Andric DFMT_8_8 | (NFMT_SSCALED << NFMT_SHIFT), 412e8d8bef9SDimitry Andric DFMT_8_8 | (NFMT_UINT << NFMT_SHIFT), 413e8d8bef9SDimitry Andric DFMT_8_8 | (NFMT_SINT << NFMT_SHIFT), 414e8d8bef9SDimitry Andric 415e8d8bef9SDimitry Andric DFMT_32 | (NFMT_UINT << NFMT_SHIFT), 416e8d8bef9SDimitry Andric DFMT_32 | (NFMT_SINT << NFMT_SHIFT), 417e8d8bef9SDimitry Andric DFMT_32 | (NFMT_FLOAT << NFMT_SHIFT), 418e8d8bef9SDimitry Andric 419e8d8bef9SDimitry Andric DFMT_16_16 | (NFMT_UNORM << NFMT_SHIFT), 420e8d8bef9SDimitry Andric DFMT_16_16 | (NFMT_SNORM << NFMT_SHIFT), 421e8d8bef9SDimitry Andric DFMT_16_16 | (NFMT_USCALED << NFMT_SHIFT), 422e8d8bef9SDimitry Andric DFMT_16_16 | (NFMT_SSCALED << NFMT_SHIFT), 423e8d8bef9SDimitry Andric DFMT_16_16 | (NFMT_UINT << NFMT_SHIFT), 424e8d8bef9SDimitry Andric DFMT_16_16 | (NFMT_SINT << NFMT_SHIFT), 425e8d8bef9SDimitry Andric DFMT_16_16 | (NFMT_FLOAT << NFMT_SHIFT), 426e8d8bef9SDimitry Andric 427e8d8bef9SDimitry Andric DFMT_10_11_11 | (NFMT_UNORM << NFMT_SHIFT), 428e8d8bef9SDimitry Andric DFMT_10_11_11 | (NFMT_SNORM << NFMT_SHIFT), 429e8d8bef9SDimitry Andric DFMT_10_11_11 | (NFMT_USCALED << NFMT_SHIFT), 430e8d8bef9SDimitry Andric DFMT_10_11_11 | (NFMT_SSCALED << NFMT_SHIFT), 431e8d8bef9SDimitry Andric DFMT_10_11_11 | (NFMT_UINT << NFMT_SHIFT), 432e8d8bef9SDimitry Andric DFMT_10_11_11 | (NFMT_SINT << NFMT_SHIFT), 433e8d8bef9SDimitry Andric DFMT_10_11_11 | (NFMT_FLOAT << NFMT_SHIFT), 434e8d8bef9SDimitry Andric 435e8d8bef9SDimitry Andric DFMT_11_11_10 | (NFMT_UNORM << NFMT_SHIFT), 436e8d8bef9SDimitry Andric DFMT_11_11_10 | (NFMT_SNORM << NFMT_SHIFT), 437e8d8bef9SDimitry Andric DFMT_11_11_10 | (NFMT_USCALED << NFMT_SHIFT), 438e8d8bef9SDimitry Andric DFMT_11_11_10 | (NFMT_SSCALED << NFMT_SHIFT), 439e8d8bef9SDimitry Andric DFMT_11_11_10 | (NFMT_UINT << NFMT_SHIFT), 440e8d8bef9SDimitry Andric DFMT_11_11_10 | (NFMT_SINT << NFMT_SHIFT), 441e8d8bef9SDimitry Andric DFMT_11_11_10 | (NFMT_FLOAT << NFMT_SHIFT), 442e8d8bef9SDimitry Andric 443e8d8bef9SDimitry Andric DFMT_10_10_10_2 | (NFMT_UNORM << NFMT_SHIFT), 444e8d8bef9SDimitry Andric DFMT_10_10_10_2 | (NFMT_SNORM << NFMT_SHIFT), 445e8d8bef9SDimitry Andric DFMT_10_10_10_2 | (NFMT_USCALED << NFMT_SHIFT), 446e8d8bef9SDimitry Andric DFMT_10_10_10_2 | (NFMT_SSCALED << NFMT_SHIFT), 447e8d8bef9SDimitry Andric DFMT_10_10_10_2 | (NFMT_UINT << NFMT_SHIFT), 448e8d8bef9SDimitry Andric DFMT_10_10_10_2 | (NFMT_SINT << NFMT_SHIFT), 449e8d8bef9SDimitry Andric 450e8d8bef9SDimitry Andric DFMT_2_10_10_10 | (NFMT_UNORM << NFMT_SHIFT), 451e8d8bef9SDimitry Andric DFMT_2_10_10_10 | (NFMT_SNORM << NFMT_SHIFT), 452e8d8bef9SDimitry Andric DFMT_2_10_10_10 | (NFMT_USCALED << NFMT_SHIFT), 453e8d8bef9SDimitry Andric DFMT_2_10_10_10 | (NFMT_SSCALED << NFMT_SHIFT), 454e8d8bef9SDimitry Andric DFMT_2_10_10_10 | (NFMT_UINT << NFMT_SHIFT), 455e8d8bef9SDimitry Andric DFMT_2_10_10_10 | (NFMT_SINT << NFMT_SHIFT), 456e8d8bef9SDimitry Andric 457e8d8bef9SDimitry Andric DFMT_8_8_8_8 | (NFMT_UNORM << NFMT_SHIFT), 458e8d8bef9SDimitry Andric DFMT_8_8_8_8 | (NFMT_SNORM << NFMT_SHIFT), 459e8d8bef9SDimitry Andric DFMT_8_8_8_8 | (NFMT_USCALED << NFMT_SHIFT), 460e8d8bef9SDimitry Andric DFMT_8_8_8_8 | (NFMT_SSCALED << NFMT_SHIFT), 461e8d8bef9SDimitry Andric DFMT_8_8_8_8 | (NFMT_UINT << NFMT_SHIFT), 462e8d8bef9SDimitry Andric DFMT_8_8_8_8 | (NFMT_SINT << NFMT_SHIFT), 463e8d8bef9SDimitry Andric 464e8d8bef9SDimitry Andric DFMT_32_32 | (NFMT_UINT << NFMT_SHIFT), 465e8d8bef9SDimitry Andric DFMT_32_32 | (NFMT_SINT << NFMT_SHIFT), 466e8d8bef9SDimitry Andric DFMT_32_32 | (NFMT_FLOAT << NFMT_SHIFT), 467e8d8bef9SDimitry Andric 468e8d8bef9SDimitry Andric DFMT_16_16_16_16 | (NFMT_UNORM << NFMT_SHIFT), 469e8d8bef9SDimitry Andric DFMT_16_16_16_16 | (NFMT_SNORM << NFMT_SHIFT), 470e8d8bef9SDimitry Andric DFMT_16_16_16_16 | (NFMT_USCALED << NFMT_SHIFT), 471e8d8bef9SDimitry Andric DFMT_16_16_16_16 | (NFMT_SSCALED << NFMT_SHIFT), 472e8d8bef9SDimitry Andric DFMT_16_16_16_16 | (NFMT_UINT << NFMT_SHIFT), 473e8d8bef9SDimitry Andric DFMT_16_16_16_16 | (NFMT_SINT << NFMT_SHIFT), 474e8d8bef9SDimitry Andric DFMT_16_16_16_16 | (NFMT_FLOAT << NFMT_SHIFT), 475e8d8bef9SDimitry Andric 476e8d8bef9SDimitry Andric DFMT_32_32_32 | (NFMT_UINT << NFMT_SHIFT), 477e8d8bef9SDimitry Andric DFMT_32_32_32 | (NFMT_SINT << NFMT_SHIFT), 478e8d8bef9SDimitry Andric DFMT_32_32_32 | (NFMT_FLOAT << NFMT_SHIFT), 479e8d8bef9SDimitry Andric DFMT_32_32_32_32 | (NFMT_UINT << NFMT_SHIFT), 480e8d8bef9SDimitry Andric DFMT_32_32_32_32 | (NFMT_SINT << NFMT_SHIFT), 481e8d8bef9SDimitry Andric DFMT_32_32_32_32 | (NFMT_FLOAT << NFMT_SHIFT) 482e8d8bef9SDimitry Andric }; 483e8d8bef9SDimitry Andric 48481ad6265SDimitry Andric StringLiteral const UfmtSymbolicGFX11[] = { 48581ad6265SDimitry Andric "BUF_FMT_INVALID", 48681ad6265SDimitry Andric 48781ad6265SDimitry Andric "BUF_FMT_8_UNORM", 48881ad6265SDimitry Andric "BUF_FMT_8_SNORM", 48981ad6265SDimitry Andric "BUF_FMT_8_USCALED", 49081ad6265SDimitry Andric "BUF_FMT_8_SSCALED", 49181ad6265SDimitry Andric "BUF_FMT_8_UINT", 49281ad6265SDimitry Andric "BUF_FMT_8_SINT", 49381ad6265SDimitry Andric 49481ad6265SDimitry Andric "BUF_FMT_16_UNORM", 49581ad6265SDimitry Andric "BUF_FMT_16_SNORM", 49681ad6265SDimitry Andric "BUF_FMT_16_USCALED", 49781ad6265SDimitry Andric "BUF_FMT_16_SSCALED", 49881ad6265SDimitry Andric "BUF_FMT_16_UINT", 49981ad6265SDimitry Andric "BUF_FMT_16_SINT", 50081ad6265SDimitry Andric "BUF_FMT_16_FLOAT", 50181ad6265SDimitry Andric 50281ad6265SDimitry Andric "BUF_FMT_8_8_UNORM", 50381ad6265SDimitry Andric "BUF_FMT_8_8_SNORM", 50481ad6265SDimitry Andric "BUF_FMT_8_8_USCALED", 50581ad6265SDimitry Andric "BUF_FMT_8_8_SSCALED", 50681ad6265SDimitry Andric "BUF_FMT_8_8_UINT", 50781ad6265SDimitry Andric "BUF_FMT_8_8_SINT", 50881ad6265SDimitry Andric 50981ad6265SDimitry Andric "BUF_FMT_32_UINT", 51081ad6265SDimitry Andric "BUF_FMT_32_SINT", 51181ad6265SDimitry Andric "BUF_FMT_32_FLOAT", 51281ad6265SDimitry Andric 51381ad6265SDimitry Andric "BUF_FMT_16_16_UNORM", 51481ad6265SDimitry Andric "BUF_FMT_16_16_SNORM", 51581ad6265SDimitry Andric "BUF_FMT_16_16_USCALED", 51681ad6265SDimitry Andric "BUF_FMT_16_16_SSCALED", 51781ad6265SDimitry Andric "BUF_FMT_16_16_UINT", 51881ad6265SDimitry Andric "BUF_FMT_16_16_SINT", 51981ad6265SDimitry Andric "BUF_FMT_16_16_FLOAT", 52081ad6265SDimitry Andric 52181ad6265SDimitry Andric "BUF_FMT_10_11_11_FLOAT", 52281ad6265SDimitry Andric 52381ad6265SDimitry Andric "BUF_FMT_11_11_10_FLOAT", 52481ad6265SDimitry Andric 52581ad6265SDimitry Andric "BUF_FMT_10_10_10_2_UNORM", 52681ad6265SDimitry Andric "BUF_FMT_10_10_10_2_SNORM", 52781ad6265SDimitry Andric "BUF_FMT_10_10_10_2_UINT", 52881ad6265SDimitry Andric "BUF_FMT_10_10_10_2_SINT", 52981ad6265SDimitry Andric 53081ad6265SDimitry Andric "BUF_FMT_2_10_10_10_UNORM", 53181ad6265SDimitry Andric "BUF_FMT_2_10_10_10_SNORM", 53281ad6265SDimitry Andric "BUF_FMT_2_10_10_10_USCALED", 53381ad6265SDimitry Andric "BUF_FMT_2_10_10_10_SSCALED", 53481ad6265SDimitry Andric "BUF_FMT_2_10_10_10_UINT", 53581ad6265SDimitry Andric "BUF_FMT_2_10_10_10_SINT", 53681ad6265SDimitry Andric 53781ad6265SDimitry Andric "BUF_FMT_8_8_8_8_UNORM", 53881ad6265SDimitry Andric "BUF_FMT_8_8_8_8_SNORM", 53981ad6265SDimitry Andric "BUF_FMT_8_8_8_8_USCALED", 54081ad6265SDimitry Andric "BUF_FMT_8_8_8_8_SSCALED", 54181ad6265SDimitry Andric "BUF_FMT_8_8_8_8_UINT", 54281ad6265SDimitry Andric "BUF_FMT_8_8_8_8_SINT", 54381ad6265SDimitry Andric 54481ad6265SDimitry Andric "BUF_FMT_32_32_UINT", 54581ad6265SDimitry Andric "BUF_FMT_32_32_SINT", 54681ad6265SDimitry Andric "BUF_FMT_32_32_FLOAT", 54781ad6265SDimitry Andric 54881ad6265SDimitry Andric "BUF_FMT_16_16_16_16_UNORM", 54981ad6265SDimitry Andric "BUF_FMT_16_16_16_16_SNORM", 55081ad6265SDimitry Andric "BUF_FMT_16_16_16_16_USCALED", 55181ad6265SDimitry Andric "BUF_FMT_16_16_16_16_SSCALED", 55281ad6265SDimitry Andric "BUF_FMT_16_16_16_16_UINT", 55381ad6265SDimitry Andric "BUF_FMT_16_16_16_16_SINT", 55481ad6265SDimitry Andric "BUF_FMT_16_16_16_16_FLOAT", 55581ad6265SDimitry Andric 55681ad6265SDimitry Andric "BUF_FMT_32_32_32_UINT", 55781ad6265SDimitry Andric "BUF_FMT_32_32_32_SINT", 55881ad6265SDimitry Andric "BUF_FMT_32_32_32_FLOAT", 55981ad6265SDimitry Andric "BUF_FMT_32_32_32_32_UINT", 56081ad6265SDimitry Andric "BUF_FMT_32_32_32_32_SINT", 56181ad6265SDimitry Andric "BUF_FMT_32_32_32_32_FLOAT" 56281ad6265SDimitry Andric }; 56381ad6265SDimitry Andric 56481ad6265SDimitry Andric unsigned const DfmtNfmt2UFmtGFX11[] = { 56581ad6265SDimitry Andric DFMT_INVALID | (NFMT_UNORM << NFMT_SHIFT), 56681ad6265SDimitry Andric 56781ad6265SDimitry Andric DFMT_8 | (NFMT_UNORM << NFMT_SHIFT), 56881ad6265SDimitry Andric DFMT_8 | (NFMT_SNORM << NFMT_SHIFT), 56981ad6265SDimitry Andric DFMT_8 | (NFMT_USCALED << NFMT_SHIFT), 57081ad6265SDimitry Andric DFMT_8 | (NFMT_SSCALED << NFMT_SHIFT), 57181ad6265SDimitry Andric DFMT_8 | (NFMT_UINT << NFMT_SHIFT), 57281ad6265SDimitry Andric DFMT_8 | (NFMT_SINT << NFMT_SHIFT), 57381ad6265SDimitry Andric 57481ad6265SDimitry Andric DFMT_16 | (NFMT_UNORM << NFMT_SHIFT), 57581ad6265SDimitry Andric DFMT_16 | (NFMT_SNORM << NFMT_SHIFT), 57681ad6265SDimitry Andric DFMT_16 | (NFMT_USCALED << NFMT_SHIFT), 57781ad6265SDimitry Andric DFMT_16 | (NFMT_SSCALED << NFMT_SHIFT), 57881ad6265SDimitry Andric DFMT_16 | (NFMT_UINT << NFMT_SHIFT), 57981ad6265SDimitry Andric DFMT_16 | (NFMT_SINT << NFMT_SHIFT), 58081ad6265SDimitry Andric DFMT_16 | (NFMT_FLOAT << NFMT_SHIFT), 58181ad6265SDimitry Andric 58281ad6265SDimitry Andric DFMT_8_8 | (NFMT_UNORM << NFMT_SHIFT), 58381ad6265SDimitry Andric DFMT_8_8 | (NFMT_SNORM << NFMT_SHIFT), 58481ad6265SDimitry Andric DFMT_8_8 | (NFMT_USCALED << NFMT_SHIFT), 58581ad6265SDimitry Andric DFMT_8_8 | (NFMT_SSCALED << NFMT_SHIFT), 58681ad6265SDimitry Andric DFMT_8_8 | (NFMT_UINT << NFMT_SHIFT), 58781ad6265SDimitry Andric DFMT_8_8 | (NFMT_SINT << NFMT_SHIFT), 58881ad6265SDimitry Andric 58981ad6265SDimitry Andric DFMT_32 | (NFMT_UINT << NFMT_SHIFT), 59081ad6265SDimitry Andric DFMT_32 | (NFMT_SINT << NFMT_SHIFT), 59181ad6265SDimitry Andric DFMT_32 | (NFMT_FLOAT << NFMT_SHIFT), 59281ad6265SDimitry Andric 59381ad6265SDimitry Andric DFMT_16_16 | (NFMT_UNORM << NFMT_SHIFT), 59481ad6265SDimitry Andric DFMT_16_16 | (NFMT_SNORM << NFMT_SHIFT), 59581ad6265SDimitry Andric DFMT_16_16 | (NFMT_USCALED << NFMT_SHIFT), 59681ad6265SDimitry Andric DFMT_16_16 | (NFMT_SSCALED << NFMT_SHIFT), 59781ad6265SDimitry Andric DFMT_16_16 | (NFMT_UINT << NFMT_SHIFT), 59881ad6265SDimitry Andric DFMT_16_16 | (NFMT_SINT << NFMT_SHIFT), 59981ad6265SDimitry Andric DFMT_16_16 | (NFMT_FLOAT << NFMT_SHIFT), 60081ad6265SDimitry Andric 60181ad6265SDimitry Andric DFMT_10_11_11 | (NFMT_FLOAT << NFMT_SHIFT), 60281ad6265SDimitry Andric 60381ad6265SDimitry Andric DFMT_11_11_10 | (NFMT_FLOAT << NFMT_SHIFT), 60481ad6265SDimitry Andric 60581ad6265SDimitry Andric DFMT_10_10_10_2 | (NFMT_UNORM << NFMT_SHIFT), 60681ad6265SDimitry Andric DFMT_10_10_10_2 | (NFMT_SNORM << NFMT_SHIFT), 60781ad6265SDimitry Andric DFMT_10_10_10_2 | (NFMT_UINT << NFMT_SHIFT), 60881ad6265SDimitry Andric DFMT_10_10_10_2 | (NFMT_SINT << NFMT_SHIFT), 60981ad6265SDimitry Andric 61081ad6265SDimitry Andric DFMT_2_10_10_10 | (NFMT_UNORM << NFMT_SHIFT), 61181ad6265SDimitry Andric DFMT_2_10_10_10 | (NFMT_SNORM << NFMT_SHIFT), 61281ad6265SDimitry Andric DFMT_2_10_10_10 | (NFMT_USCALED << NFMT_SHIFT), 61381ad6265SDimitry Andric DFMT_2_10_10_10 | (NFMT_SSCALED << NFMT_SHIFT), 61481ad6265SDimitry Andric DFMT_2_10_10_10 | (NFMT_UINT << NFMT_SHIFT), 61581ad6265SDimitry Andric DFMT_2_10_10_10 | (NFMT_SINT << NFMT_SHIFT), 61681ad6265SDimitry Andric 61781ad6265SDimitry Andric DFMT_8_8_8_8 | (NFMT_UNORM << NFMT_SHIFT), 61881ad6265SDimitry Andric DFMT_8_8_8_8 | (NFMT_SNORM << NFMT_SHIFT), 61981ad6265SDimitry Andric DFMT_8_8_8_8 | (NFMT_USCALED << NFMT_SHIFT), 62081ad6265SDimitry Andric DFMT_8_8_8_8 | (NFMT_SSCALED << NFMT_SHIFT), 62181ad6265SDimitry Andric DFMT_8_8_8_8 | (NFMT_UINT << NFMT_SHIFT), 62281ad6265SDimitry Andric DFMT_8_8_8_8 | (NFMT_SINT << NFMT_SHIFT), 62381ad6265SDimitry Andric 62481ad6265SDimitry Andric DFMT_32_32 | (NFMT_UINT << NFMT_SHIFT), 62581ad6265SDimitry Andric DFMT_32_32 | (NFMT_SINT << NFMT_SHIFT), 62681ad6265SDimitry Andric DFMT_32_32 | (NFMT_FLOAT << NFMT_SHIFT), 62781ad6265SDimitry Andric 62881ad6265SDimitry Andric DFMT_16_16_16_16 | (NFMT_UNORM << NFMT_SHIFT), 62981ad6265SDimitry Andric DFMT_16_16_16_16 | (NFMT_SNORM << NFMT_SHIFT), 63081ad6265SDimitry Andric DFMT_16_16_16_16 | (NFMT_USCALED << NFMT_SHIFT), 63181ad6265SDimitry Andric DFMT_16_16_16_16 | (NFMT_SSCALED << NFMT_SHIFT), 63281ad6265SDimitry Andric DFMT_16_16_16_16 | (NFMT_UINT << NFMT_SHIFT), 63381ad6265SDimitry Andric DFMT_16_16_16_16 | (NFMT_SINT << NFMT_SHIFT), 63481ad6265SDimitry Andric DFMT_16_16_16_16 | (NFMT_FLOAT << NFMT_SHIFT), 63581ad6265SDimitry Andric 63681ad6265SDimitry Andric DFMT_32_32_32 | (NFMT_UINT << NFMT_SHIFT), 63781ad6265SDimitry Andric DFMT_32_32_32 | (NFMT_SINT << NFMT_SHIFT), 63881ad6265SDimitry Andric DFMT_32_32_32 | (NFMT_FLOAT << NFMT_SHIFT), 63981ad6265SDimitry Andric DFMT_32_32_32_32 | (NFMT_UINT << NFMT_SHIFT), 64081ad6265SDimitry Andric DFMT_32_32_32_32 | (NFMT_SINT << NFMT_SHIFT), 64181ad6265SDimitry Andric DFMT_32_32_32_32 | (NFMT_FLOAT << NFMT_SHIFT) 64281ad6265SDimitry Andric }; 64381ad6265SDimitry Andric 644e8d8bef9SDimitry Andric } // namespace MTBUFFormat 645e8d8bef9SDimitry Andric 6460b57cec5SDimitry Andric namespace Swizzle { 6470b57cec5SDimitry Andric 6480b57cec5SDimitry Andric // This must be in sync with llvm::AMDGPU::Swizzle::Id enum members, see SIDefines.h. 6490b57cec5SDimitry Andric const char* const IdSymbolic[] = { 6500b57cec5SDimitry Andric "QUAD_PERM", 6510b57cec5SDimitry Andric "BITMASK_PERM", 6520b57cec5SDimitry Andric "SWAP", 6530b57cec5SDimitry Andric "REVERSE", 6540b57cec5SDimitry Andric "BROADCAST", 6550b57cec5SDimitry Andric }; 6560b57cec5SDimitry Andric 6570b57cec5SDimitry Andric } // namespace Swizzle 6580b57cec5SDimitry Andric 6590b57cec5SDimitry Andric namespace VGPRIndexMode { 6600b57cec5SDimitry Andric 6610b57cec5SDimitry Andric // This must be in sync with llvm::AMDGPU::VGPRIndexMode::Id enum members, see SIDefines.h. 6620b57cec5SDimitry Andric const char* const IdSymbolic[] = { 6630b57cec5SDimitry Andric "SRC0", 6640b57cec5SDimitry Andric "SRC1", 6650b57cec5SDimitry Andric "SRC2", 6660b57cec5SDimitry Andric "DST", 6670b57cec5SDimitry Andric }; 6680b57cec5SDimitry Andric 6690b57cec5SDimitry Andric } // namespace VGPRIndexMode 6700b57cec5SDimitry Andric 671*0fca6ea1SDimitry Andric namespace UCVersion { 672*0fca6ea1SDimitry Andric 673*0fca6ea1SDimitry Andric ArrayRef<GFXVersion> getGFXVersions() { 674*0fca6ea1SDimitry Andric // GFX6, GFX8 and GFX9 don't support s_version and there are no 675*0fca6ea1SDimitry Andric // UC_VERSION_GFX* codes for them. 676*0fca6ea1SDimitry Andric static const GFXVersion Versions[] = {{"UC_VERSION_GFX7", 0}, 677*0fca6ea1SDimitry Andric {"UC_VERSION_GFX10", 4}, 678*0fca6ea1SDimitry Andric {"UC_VERSION_GFX11", 6}, 679*0fca6ea1SDimitry Andric {"UC_VERSION_GFX12", 9}}; 680*0fca6ea1SDimitry Andric 681*0fca6ea1SDimitry Andric return Versions; 682*0fca6ea1SDimitry Andric } 683*0fca6ea1SDimitry Andric 684*0fca6ea1SDimitry Andric } // namespace UCVersion 685*0fca6ea1SDimitry Andric 686*0fca6ea1SDimitry Andric } // namespace llvm::AMDGPU 687