Browse Source
Merge pull request #2082 from FernandoS27/txq-stl
Fix TXQ not using the component mask.
pull/15/merge
bunnei
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
13 additions and
6 deletions
-
src/video_core/engines/shader_bytecode.h
-
src/video_core/shader/decode/memory.cpp
|
|
|
@ -981,6 +981,10 @@ union Instruction { |
|
|
|
} |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
bool IsComponentEnabled(std::size_t component) const { |
|
|
|
return ((1ULL << component) & component_mask) != 0; |
|
|
|
} |
|
|
|
} txq; |
|
|
|
|
|
|
|
union { |
|
|
|
|
|
|
|
@ -324,15 +324,18 @@ u32 ShaderIR::DecodeMemory(BasicBlock& bb, const BasicBlock& code, u32 pc) { |
|
|
|
const auto& sampler = |
|
|
|
GetSampler(instr.sampler, Tegra::Shader::TextureType::Texture2D, false, false); |
|
|
|
|
|
|
|
u32 indexer = 0; |
|
|
|
switch (instr.txq.query_type) { |
|
|
|
case Tegra::Shader::TextureQueryType::Dimension: { |
|
|
|
for (u32 element = 0; element < 4; ++element) { |
|
|
|
if (instr.txq.IsComponentEnabled(element)) { |
|
|
|
MetaTexture meta{sampler, element}; |
|
|
|
const Node value = Operation(OperationCode::F4TextureQueryDimensions, |
|
|
|
std::move(meta), GetRegister(instr.gpr8)); |
|
|
|
SetTemporal(bb, element, value); |
|
|
|
SetTemporal(bb, indexer++, value); |
|
|
|
} |
|
|
|
} |
|
|
|
for (u32 i = 0; i < 4; ++i) { |
|
|
|
for (u32 i = 0; i < indexer; ++i) { |
|
|
|
SetRegister(bb, instr.gpr0.Value() + i, GetTemporal(i)); |
|
|
|
} |
|
|
|
break; |
|
|
|
|