Implement TXQ_B
This commit is contained in:
parent
189bd1980c
commit
4841440382
|
@ -1343,6 +1343,7 @@ public:
|
||||||
TEX,
|
TEX,
|
||||||
TEX_B, // Texture Load Bindless
|
TEX_B, // Texture Load Bindless
|
||||||
TXQ, // Texture Query
|
TXQ, // Texture Query
|
||||||
|
TXQ_B, // Texture Query Bindless
|
||||||
TEXS, // Texture Fetch with scalar/non-vec4 source/destinations
|
TEXS, // Texture Fetch with scalar/non-vec4 source/destinations
|
||||||
TLDS, // Texture Load with scalar/non-vec4 source/destinations
|
TLDS, // Texture Load with scalar/non-vec4 source/destinations
|
||||||
TLD4, // Texture Load 4
|
TLD4, // Texture Load 4
|
||||||
|
@ -1612,6 +1613,7 @@ private:
|
||||||
INST("110000----111---", Id::TEX, Type::Texture, "TEX"),
|
INST("110000----111---", Id::TEX, Type::Texture, "TEX"),
|
||||||
INST("1101111010111---", Id::TEX_B, Type::Texture, "TEX_B"),
|
INST("1101111010111---", Id::TEX_B, Type::Texture, "TEX_B"),
|
||||||
INST("1101111101001---", Id::TXQ, Type::Texture, "TXQ"),
|
INST("1101111101001---", Id::TXQ, Type::Texture, "TXQ"),
|
||||||
|
INST("1101111101010---", Id::TXQ_B, Type::Texture, "TXQ_B"),
|
||||||
INST("1101-00---------", Id::TEXS, Type::Texture, "TEXS"),
|
INST("1101-00---------", Id::TEXS, Type::Texture, "TEXS"),
|
||||||
INST("1101101---------", Id::TLDS, Type::Texture, "TLDS"),
|
INST("1101101---------", Id::TLDS, Type::Texture, "TLDS"),
|
||||||
INST("110010----111---", Id::TLD4, Type::Texture, "TLD4"),
|
INST("110010----111---", Id::TLD4, Type::Texture, "TLD4"),
|
||||||
|
|
|
@ -151,6 +151,8 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) {
|
||||||
WriteTexsInstructionFloat(bb, instr, values);
|
WriteTexsInstructionFloat(bb, instr, values);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case OpCode::Id::TXQ_B:
|
||||||
|
is_bindless = true;
|
||||||
case OpCode::Id::TXQ: {
|
case OpCode::Id::TXQ: {
|
||||||
if (instr.txq.UsesMiscMode(TextureMiscMode::NODEP)) {
|
if (instr.txq.UsesMiscMode(TextureMiscMode::NODEP)) {
|
||||||
LOG_WARNING(HW_GPU, "TXQ.NODEP implementation is incomplete");
|
LOG_WARNING(HW_GPU, "TXQ.NODEP implementation is incomplete");
|
||||||
|
@ -160,7 +162,10 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) {
|
||||||
// Sadly, not all texture instructions specify the type of texture their sampler
|
// Sadly, not all texture instructions specify the type of texture their sampler
|
||||||
// uses. This must be fixed at a later instance.
|
// uses. This must be fixed at a later instance.
|
||||||
const auto& sampler =
|
const auto& sampler =
|
||||||
GetSampler(instr.sampler, Tegra::Shader::TextureType::Texture2D, false, false);
|
!is_bindless
|
||||||
|
? GetSampler(instr.sampler, Tegra::Shader::TextureType::Texture2D, false, false)
|
||||||
|
: GetBindlessSampler(instr.gpr8, Tegra::Shader::TextureType::Texture2D, false,
|
||||||
|
false);
|
||||||
|
|
||||||
u32 indexer = 0;
|
u32 indexer = 0;
|
||||||
switch (instr.txq.query_type) {
|
switch (instr.txq.query_type) {
|
||||||
|
@ -171,7 +176,8 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) {
|
||||||
}
|
}
|
||||||
MetaTexture meta{sampler, {}, {}, {}, {}, {}, {}, element};
|
MetaTexture meta{sampler, {}, {}, {}, {}, {}, {}, element};
|
||||||
const Node value =
|
const Node value =
|
||||||
Operation(OperationCode::TextureQueryDimensions, meta, GetRegister(instr.gpr8));
|
Operation(OperationCode::TextureQueryDimensions, meta,
|
||||||
|
GetRegister(instr.gpr8.Value() + (is_bindless ? 1 : 0)));
|
||||||
SetTemporal(bb, indexer++, value);
|
SetTemporal(bb, indexer++, value);
|
||||||
}
|
}
|
||||||
for (u32 i = 0; i < indexer; ++i) {
|
for (u32 i = 0; i < indexer; ++i) {
|
||||||
|
|
Reference in New Issue