Implemented Control Codes
This commit is contained in:
parent
a94b623dfb
commit
aac77bbd18
|
@ -240,6 +240,41 @@ enum class FlowCondition : u64 {
|
||||||
Fcsm_Tr = 0x1C, // TODO(bunnei): What is this used for?
|
Fcsm_Tr = 0x1C, // TODO(bunnei): What is this used for?
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class ControlCode : u64 {
|
||||||
|
F = 0,
|
||||||
|
LT = 1,
|
||||||
|
EQ = 2,
|
||||||
|
LE = 3,
|
||||||
|
GT = 4,
|
||||||
|
NE = 5,
|
||||||
|
GE = 6,
|
||||||
|
Num = 7,
|
||||||
|
Nan = 8,
|
||||||
|
LTU = 9,
|
||||||
|
EQU = 10,
|
||||||
|
LEU = 11,
|
||||||
|
GTU = 12,
|
||||||
|
NEU = 13,
|
||||||
|
GEU = 14,
|
||||||
|
//
|
||||||
|
OFF = 16,
|
||||||
|
LO = 17,
|
||||||
|
SFF = 18,
|
||||||
|
LS = 19,
|
||||||
|
HI = 20,
|
||||||
|
SFT = 21,
|
||||||
|
HS = 22,
|
||||||
|
OFT = 23,
|
||||||
|
CSM_TA = 24,
|
||||||
|
CSM_TR = 25,
|
||||||
|
CSM_MX = 26,
|
||||||
|
FCSM_TA = 27,
|
||||||
|
FCSM_TR = 28,
|
||||||
|
FCSM_MX = 29,
|
||||||
|
RLE = 30,
|
||||||
|
RGT = 31,
|
||||||
|
};
|
||||||
|
|
||||||
enum class PredicateResultMode : u64 {
|
enum class PredicateResultMode : u64 {
|
||||||
None = 0x0,
|
None = 0x0,
|
||||||
NotZero = 0x3,
|
NotZero = 0x3,
|
||||||
|
@ -735,6 +770,7 @@ union Instruction {
|
||||||
BitField<36, 5, u64> index;
|
BitField<36, 5, u64> index;
|
||||||
} cbuf36;
|
} cbuf36;
|
||||||
|
|
||||||
|
BitField<47, 1, u64> generates_cc;
|
||||||
BitField<61, 1, u64> is_b_imm;
|
BitField<61, 1, u64> is_b_imm;
|
||||||
BitField<60, 1, u64> is_b_gpr;
|
BitField<60, 1, u64> is_b_gpr;
|
||||||
BitField<59, 1, u64> is_c_gpr;
|
BitField<59, 1, u64> is_c_gpr;
|
||||||
|
|
|
@ -351,6 +351,15 @@ public:
|
||||||
shader.AddLine(dest + " = " + src + ';');
|
shader.AddLine(dest + " = " + src + ';');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string GetControlCode(const Tegra::Shader::ControlCode cc) {
|
||||||
|
u32 code = static_cast<u32>(cc);
|
||||||
|
return "controlCode_" + std::to_string(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetControlCode(const Tegra::Shader::ControlCode cc, const std::string& value) {
|
||||||
|
shader.AddLine(GetControlCode(cc) + " = " + value + ';');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes code that does a output attribute assignment to register operation. Output attributes
|
* Writes code that does a output attribute assignment to register operation. Output attributes
|
||||||
* are stored as floats, so this may require conversion.
|
* are stored as floats, so this may require conversion.
|
||||||
|
@ -414,6 +423,12 @@ public:
|
||||||
}
|
}
|
||||||
declarations.AddNewLine();
|
declarations.AddNewLine();
|
||||||
|
|
||||||
|
for (u32 cc = 0; cc < 32; cc++) {
|
||||||
|
Tegra::Shader::ControlCode code = static_cast<Tegra::Shader::ControlCode>(cc);
|
||||||
|
declarations.AddLine("bool " + GetControlCode(code) + " = false;");
|
||||||
|
}
|
||||||
|
declarations.AddNewLine();
|
||||||
|
|
||||||
for (const auto element : declr_input_attribute) {
|
for (const auto element : declr_input_attribute) {
|
||||||
// TODO(bunnei): Use proper number of elements for these
|
// TODO(bunnei): Use proper number of elements for these
|
||||||
u32 idx =
|
u32 idx =
|
||||||
|
|
Reference in New Issue