mirror of
https://github.com/EduApps-CDG/OpenDX
synced 2024-12-30 09:45:37 +01:00
[dxbc] Some more decoding stuff
This commit is contained in:
parent
6954cfd84c
commit
79e2236958
@ -17,7 +17,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
|
|
||||||
bool DxbcCompiler::processInstruction(DxbcInstruction ins) {
|
bool DxbcCompiler::processInstruction(DxbcInstruction ins) {
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,8 +59,6 @@ namespace dxvk {
|
|||||||
|
|
||||||
uint32_t m_entryPointId = 0;
|
uint32_t m_entryPointId = 0;
|
||||||
|
|
||||||
bool handleDcl(DxbcInstruction ins);
|
|
||||||
|
|
||||||
void declareCapabilities();
|
void declareCapabilities();
|
||||||
void declareMemoryModel();
|
void declareMemoryModel();
|
||||||
|
|
||||||
|
@ -89,6 +89,15 @@ namespace dxvk {
|
|||||||
DxbcOpcodeTokenExt(uint32_t token)
|
DxbcOpcodeTokenExt(uint32_t token)
|
||||||
: m_token(token) { }
|
: m_token(token) { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Extended opcode
|
||||||
|
* \returns Extended opcode
|
||||||
|
*/
|
||||||
|
DxbcExtOpcode opcode() const {
|
||||||
|
return static_cast<DxbcExtOpcode>(
|
||||||
|
bit::extract(m_token, 0, 5));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Control info
|
* \brief Control info
|
||||||
*
|
*
|
||||||
@ -312,6 +321,39 @@ namespace dxvk {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct DxbcInstructionSampleControls {
|
||||||
|
int32_t uoffset;
|
||||||
|
int32_t voffset;
|
||||||
|
int32_t woffset;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct DxbcInstructionResourceDim {
|
||||||
|
DxbcResourceDim dim;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct DxbcInstructionResourceRet {
|
||||||
|
DxbcResourceReturnType x;
|
||||||
|
DxbcResourceReturnType y;
|
||||||
|
DxbcResourceReturnType z;
|
||||||
|
DxbcResourceReturnType w;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
union DxbcInstructionModifierInfo {
|
||||||
|
DxbcInstructionSampleControls sampleControls;
|
||||||
|
DxbcInstructionResourceDim resourceDim;
|
||||||
|
DxbcInstructionResourceRet resourceRet;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct DxbcInstructionModifier {
|
||||||
|
DxbcExtOpcode code;
|
||||||
|
DxbcInstructionModifierInfo info;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Instruction decoder
|
* \brief Instruction decoder
|
||||||
*
|
*
|
||||||
|
@ -218,19 +218,23 @@ namespace dxvk {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
enum class DxbcOperandNumComponents : uint32_t {
|
/**
|
||||||
Component0 = 0,
|
* \brief Extended opcode
|
||||||
Component1 = 1,
|
*/
|
||||||
Component4 = 2,
|
enum class DxbcExtOpcode : uint32_t {
|
||||||
|
Empty = 0,
|
||||||
|
SampleControls = 1,
|
||||||
|
ResourceDim = 2,
|
||||||
|
ResourceReturnType = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
enum class DxbcOperandComponentSelectionMode : uint32_t {
|
/**
|
||||||
Mask = 0,
|
* \brief Operand type
|
||||||
Swizzle = 1,
|
*
|
||||||
Select1 = 2,
|
* Selects the 'register file' from which
|
||||||
};
|
* to retrieve an operand's value.
|
||||||
|
*/
|
||||||
enum class DxbcOperandType : uint32_t {
|
enum class DxbcOperandType : uint32_t {
|
||||||
Temp = 0,
|
Temp = 0,
|
||||||
Input = 1,
|
Input = 1,
|
||||||
@ -275,22 +279,122 @@ namespace dxvk {
|
|||||||
CycleCounter = 40,
|
CycleCounter = 40,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Number of components
|
||||||
|
*
|
||||||
|
* Used by operands to determine whether the
|
||||||
|
* operand has one, four or zero components.
|
||||||
|
*/
|
||||||
|
enum class DxbcOperandNumComponents : uint32_t {
|
||||||
|
Component0 = 0,
|
||||||
|
Component1 = 1,
|
||||||
|
Component4 = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Component selection mode
|
||||||
|
*
|
||||||
|
* When an operand has four components, the
|
||||||
|
* component selection mode deterines which
|
||||||
|
* components are used for the operation.
|
||||||
|
*/
|
||||||
|
enum class DxbcOperandComponentSelectionMode : uint32_t {
|
||||||
|
Mask = 0,
|
||||||
|
Swizzle = 1,
|
||||||
|
Select1 = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Component name
|
||||||
|
* Used for component selection.
|
||||||
|
*/
|
||||||
enum class DxbcOperandComponentName : uint32_t {
|
enum class DxbcOperandComponentName : uint32_t {
|
||||||
X = 0, R = 0, Y = 1, G = 1,
|
X = 0, Y = 1, Z = 2, W = 3,
|
||||||
Z = 2, B = 2, W = 3, A = 3,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Index representation
|
||||||
|
*
|
||||||
|
* Determines how an operand
|
||||||
|
* register index is stored.
|
||||||
|
*/
|
||||||
enum class DxbcOperandIndexRepresentation : uint32_t {
|
enum class DxbcOperandIndexRepresentation : uint32_t {
|
||||||
Imm32 = 0,
|
Imm32 = 0,
|
||||||
Imm64 = 1,
|
Imm64 = 1,
|
||||||
Relative = 2,
|
Relative = 2,
|
||||||
Imm32Relative = 3,
|
Imm32Relative = 3,
|
||||||
Imm64Relative = 3,
|
Imm64Relative = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Extended operand type
|
||||||
|
*/
|
||||||
enum class DxbcOperandExt : uint32_t {
|
enum class DxbcOperandExt : uint32_t {
|
||||||
OperandModifier = 1,
|
OperandModifier = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Resource dimension
|
||||||
|
* The type of a resource.
|
||||||
|
*/
|
||||||
|
enum class DxbcResourceDim : uint32_t {
|
||||||
|
Unknown = 0,
|
||||||
|
Buffer = 1,
|
||||||
|
Texture1D = 2,
|
||||||
|
Texture2D = 3,
|
||||||
|
Texture2DMs = 4,
|
||||||
|
Texture3D = 5,
|
||||||
|
TextureCube = 6,
|
||||||
|
Texture1DArr = 7,
|
||||||
|
Texture2DArr = 8,
|
||||||
|
Texture2DMsArr = 9,
|
||||||
|
TextureCubeArr = 10,
|
||||||
|
RawBuffer = 11,
|
||||||
|
StructuredBuffer = 12,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Resource return type
|
||||||
|
* Data type for resource read ops.
|
||||||
|
*/
|
||||||
|
enum class DxbcResourceReturnType : uint32_t {
|
||||||
|
Unorm = 1,
|
||||||
|
Snorm = 2,
|
||||||
|
Sint = 3,
|
||||||
|
Uint = 4,
|
||||||
|
Float = 5,
|
||||||
|
Mixed = 6, /// ?
|
||||||
|
Double = 7,
|
||||||
|
Continued = 8, /// ?
|
||||||
|
Unused = 9, /// ?
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Register component type
|
||||||
|
* Data type of a register component.
|
||||||
|
*/
|
||||||
|
enum class DxbcRegisterComponentType : uint32_t {
|
||||||
|
Unknown = 0,
|
||||||
|
Uint32 = 1,
|
||||||
|
Sint32 = 2,
|
||||||
|
Float32 = 3,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Instruction return type
|
||||||
|
*/
|
||||||
|
enum class DxbcInstructionReturnType : uint32_t {
|
||||||
|
Float = 0,
|
||||||
|
Uint = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user