[DXBC] RDEF enums, ISGN/PCSG/OSGN structs and enums
This commit is contained in:
parent
112c66df69
commit
0f0ed0eb21
File diff suppressed because it is too large
Load Diff
|
@ -86,7 +86,7 @@ namespace gpu {
|
||||||
// case.
|
// case.
|
||||||
//
|
//
|
||||||
// For bytecode structure, see d3d12TokenizedProgramFormat.hpp from the Windows
|
// For bytecode structure, see d3d12TokenizedProgramFormat.hpp from the Windows
|
||||||
// Driver Kit.
|
// Driver Kit, and DXILConv from DirectX Shader Compiler.
|
||||||
//
|
//
|
||||||
// Avoid using uninitialized register components - such as registers written to
|
// Avoid using uninitialized register components - such as registers written to
|
||||||
// in "if" and not in "else", but then used outside unconditionally or with a
|
// in "if" and not in "else", but then used outside unconditionally or with a
|
||||||
|
@ -437,6 +437,159 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
||||||
void ProcessAluInstruction(const ParsedAluInstruction& instr) override;
|
void ProcessAluInstruction(const ParsedAluInstruction& instr) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// D3D_SHADER_VARIABLE_CLASS
|
||||||
|
enum class DxbcRdefVariableClass : uint32_t {
|
||||||
|
kScalar,
|
||||||
|
kVector,
|
||||||
|
kMatrixRows,
|
||||||
|
kMatrixColumns,
|
||||||
|
kObject,
|
||||||
|
kStruct,
|
||||||
|
kInterfaceClass,
|
||||||
|
kInterfacePointer,
|
||||||
|
};
|
||||||
|
|
||||||
|
// D3D_SHADER_VARIABLE_TYPE subset
|
||||||
|
enum class DxbcRdefVariableType : uint32_t {
|
||||||
|
kInt = 2,
|
||||||
|
kFloat = 3,
|
||||||
|
kUInt = 19,
|
||||||
|
};
|
||||||
|
|
||||||
|
// D3D_SHADER_VARIABLE_FLAGS
|
||||||
|
enum DxbcRdefVariableFlags : uint32_t {
|
||||||
|
kDxbcRdefVariableFlagUserPacked = 1 << 0,
|
||||||
|
kDxbcRdefVariableFlagUsed = 1 << 1,
|
||||||
|
kDxbcRdefVariableFlagInterfacePointer = 1 << 2,
|
||||||
|
kDxbcRdefVariableFlagInterfaceParameter = 1 << 3,
|
||||||
|
};
|
||||||
|
|
||||||
|
// D3D_CBUFFER_TYPE
|
||||||
|
enum class DxbcRdefCbufferType : uint32_t {
|
||||||
|
kCbuffer,
|
||||||
|
kTbuffer,
|
||||||
|
kInterfacePointers,
|
||||||
|
kResourceBindInfo,
|
||||||
|
};
|
||||||
|
|
||||||
|
// D3D_SHADER_INPUT_TYPE
|
||||||
|
enum class DxbcRdefInputType : uint32_t {
|
||||||
|
kCbuffer,
|
||||||
|
kTbuffer,
|
||||||
|
kTexture,
|
||||||
|
kSampler,
|
||||||
|
kUAVRWTyped,
|
||||||
|
kStructured,
|
||||||
|
kUAVRWStructured,
|
||||||
|
kByteAddress,
|
||||||
|
kUAVRWByteAddress,
|
||||||
|
kUAVAppendStructured,
|
||||||
|
kUAVConsumeStructured,
|
||||||
|
kUAVRWStructuredWithCounter,
|
||||||
|
};
|
||||||
|
|
||||||
|
// D3D_RESOURCE_RETURN_TYPE
|
||||||
|
enum class DxbcRdefReturnType : uint32_t {
|
||||||
|
kVoid,
|
||||||
|
kUNorm,
|
||||||
|
kSNorm,
|
||||||
|
kSInt,
|
||||||
|
kUInt,
|
||||||
|
kFloat,
|
||||||
|
kMixed,
|
||||||
|
kDouble,
|
||||||
|
kContinued,
|
||||||
|
};
|
||||||
|
|
||||||
|
// D3D12_SRV_DIMENSION/D3D12_UAV_DIMENSION
|
||||||
|
enum class DxbcRdefDimension : uint32_t {
|
||||||
|
kUnknown = 0,
|
||||||
|
|
||||||
|
kSRVBuffer = 1,
|
||||||
|
kSRVTexture1D,
|
||||||
|
kSRVTexture1DArray,
|
||||||
|
kSRVTexture2D,
|
||||||
|
kSRVTexture2DArray,
|
||||||
|
kSRVTexture2DMS,
|
||||||
|
kSRVTexture2DMSArray,
|
||||||
|
kSRVTexture3D,
|
||||||
|
kSRVTextureCube,
|
||||||
|
kSRVTextureCubeArray,
|
||||||
|
|
||||||
|
kUAVBuffer = 1,
|
||||||
|
kUAVTexture1D,
|
||||||
|
kUAVTexture1DArray,
|
||||||
|
kUAVTexture2D,
|
||||||
|
kUAVTexture2DArray,
|
||||||
|
kUAVTexture3D,
|
||||||
|
};
|
||||||
|
|
||||||
|
// D3D_SHADER_INPUT_FLAGS
|
||||||
|
enum DxbcRdefInputFlags : uint32_t {
|
||||||
|
// For constant buffers, UserPacked is set if it was declared as `cbuffer`
|
||||||
|
// rather than `ConstantBuffer<T>` (not dynamically indexable; though
|
||||||
|
// non-uniform dynamic indexing of constant buffers also didn't work on AMD
|
||||||
|
// drivers in 2018).
|
||||||
|
DxbcRdefInputFlagUserPacked = 1 << 0,
|
||||||
|
DxbcRdefInputFlagComparisonSampler = 1 << 1,
|
||||||
|
DxbcRdefInputFlagComponent0 = 1 << 2,
|
||||||
|
DxbcRdefInputFlagComponent1 = 1 << 3,
|
||||||
|
DxbcRdefInputFlagsComponents =
|
||||||
|
DxbcRdefInputFlagComponent0 | DxbcRdefInputFlagComponent1,
|
||||||
|
DxbcRdefInputFlagUnused = 1 << 4,
|
||||||
|
};
|
||||||
|
|
||||||
|
// D3D_NAME subset
|
||||||
|
enum class DxbcName : uint32_t {
|
||||||
|
kUndefined = 0,
|
||||||
|
kPosition = 1,
|
||||||
|
kClipDistance = 2,
|
||||||
|
kCullDistance = 3,
|
||||||
|
kVertexID = 6,
|
||||||
|
kIsFrontFace = 9,
|
||||||
|
kFinalQuadEdgeTessFactor = 11,
|
||||||
|
kFinalQuadInsideTessFactor = 12,
|
||||||
|
kFinalTriEdgeTessFactor = 13,
|
||||||
|
kFinalTriInsideTessFactor = 14,
|
||||||
|
};
|
||||||
|
|
||||||
|
// D3D_REGISTER_COMPONENT_TYPE
|
||||||
|
enum class DxbcSignatureRegisterComponentType : uint32_t {
|
||||||
|
kUnknown,
|
||||||
|
kUInt32,
|
||||||
|
kSInt32,
|
||||||
|
kFloat32,
|
||||||
|
};
|
||||||
|
|
||||||
|
// D3D10_INTERNALSHADER_PARAMETER
|
||||||
|
struct DxbcSignatureParameter {
|
||||||
|
// Offset in bytes from the start of the chunk.
|
||||||
|
uint32_t semantic_name;
|
||||||
|
uint32_t semantic_index;
|
||||||
|
// kUndefined for pixel shader outputs - inferred from the component type
|
||||||
|
// and what is used in the shader.
|
||||||
|
DxbcName system_value;
|
||||||
|
DxbcSignatureRegisterComponentType component_type;
|
||||||
|
// o#/v# when there's linkage, SV_Target index or -1 in pixel shader output.
|
||||||
|
uint32_t register_index;
|
||||||
|
uint8_t mask;
|
||||||
|
union {
|
||||||
|
// For an output signature.
|
||||||
|
uint8_t never_writes_mask;
|
||||||
|
// For an input signature.
|
||||||
|
uint8_t always_reads_mask;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
static_assert(alignof(DxbcSignatureParameter) <= sizeof(uint32_t));
|
||||||
|
|
||||||
|
// D3D10_INTERNALSHADER_SIGNATURE
|
||||||
|
struct DxbcSignature {
|
||||||
|
uint32_t parameter_count;
|
||||||
|
// Offset in bytes from the start of the chunk.
|
||||||
|
uint32_t parameter_info_offset;
|
||||||
|
};
|
||||||
|
static_assert(alignof(DxbcSignature) <= sizeof(uint32_t));
|
||||||
|
|
||||||
// D3D11_SB_TESSELLATOR_DOMAIN
|
// D3D11_SB_TESSELLATOR_DOMAIN
|
||||||
enum class DxbcTessellatorDomain : uint32_t {
|
enum class DxbcTessellatorDomain : uint32_t {
|
||||||
kUndefined,
|
kUndefined,
|
||||||
|
@ -445,7 +598,7 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
||||||
kQuad,
|
kQuad,
|
||||||
};
|
};
|
||||||
|
|
||||||
// D3D10_SB_OPERAND_TYPE
|
// D3D10_SB_OPERAND_TYPE subset
|
||||||
enum class DxbcOperandType : uint32_t {
|
enum class DxbcOperandType : uint32_t {
|
||||||
kTemp = 0,
|
kTemp = 0,
|
||||||
kInput = 1,
|
kInput = 1,
|
||||||
|
@ -523,9 +676,11 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
||||||
struct DxbcIndex {
|
struct DxbcIndex {
|
||||||
// D3D10_SB_OPERAND_INDEX_REPRESENTATION
|
// D3D10_SB_OPERAND_INDEX_REPRESENTATION
|
||||||
enum class Representation : uint32_t {
|
enum class Representation : uint32_t {
|
||||||
kImmediate32 = 0,
|
kImmediate32,
|
||||||
kRelative = 2,
|
kImmediate64,
|
||||||
kImmediate32PlusRelative = 3,
|
kRelative,
|
||||||
|
kImmediate32PlusRelative,
|
||||||
|
kImmediate64PlusRelative,
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32_t index_;
|
uint32_t index_;
|
||||||
|
@ -900,7 +1055,7 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
||||||
bool force_vector = false) const;
|
bool force_vector = false) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
// D3D10_SB_OPCODE_TYPE
|
// D3D10_SB_OPCODE_TYPE subset
|
||||||
enum class DxbcOpcode : uint32_t {
|
enum class DxbcOpcode : uint32_t {
|
||||||
kAdd = 0,
|
kAdd = 0,
|
||||||
kAnd = 1,
|
kAnd = 1,
|
||||||
|
@ -2019,10 +2174,8 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
||||||
struct RdefType {
|
struct RdefType {
|
||||||
// Name ignored for arrays.
|
// Name ignored for arrays.
|
||||||
const char* name;
|
const char* name;
|
||||||
// D3D10_SHADER_VARIABLE_CLASS.
|
DxbcRdefVariableClass variable_class;
|
||||||
uint32_t type_class;
|
DxbcRdefVariableType variable_type;
|
||||||
// D3D10_SHADER_VARIABLE_TYPE.
|
|
||||||
uint32_t type;
|
|
||||||
uint32_t row_count;
|
uint32_t row_count;
|
||||||
uint32_t column_count;
|
uint32_t column_count;
|
||||||
// 0 for primitive types, 1 for structures, array size for arrays.
|
// 0 for primitive types, 1 for structures, array size for arrays.
|
||||||
|
|
Loading…
Reference in New Issue