summaryrefslogtreecommitdiffstats
path: root/src/shader_recompiler/frontend/maxwell/translate/impl/texture_gather.cpp
diff options
context:
space:
mode:
authorFernandoS27 <fsahmkow27@gmail.com>2021-03-26 16:02:04 +0100
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:24 +0200
commit742d11c2ad948c8630be15901514ec9e5e5fcd20 (patch)
tree4d9e0976f8c95fbb5c8006b46579200315b04f0f /src/shader_recompiler/frontend/maxwell/translate/impl/texture_gather.cpp
parentshader: Fix Array Indices in TEX/TLD4 (diff)
downloadyuzu-742d11c2ad948c8630be15901514ec9e5e5fcd20.tar
yuzu-742d11c2ad948c8630be15901514ec9e5e5fcd20.tar.gz
yuzu-742d11c2ad948c8630be15901514ec9e5e5fcd20.tar.bz2
yuzu-742d11c2ad948c8630be15901514ec9e5e5fcd20.tar.lz
yuzu-742d11c2ad948c8630be15901514ec9e5e5fcd20.tar.xz
yuzu-742d11c2ad948c8630be15901514ec9e5e5fcd20.tar.zst
yuzu-742d11c2ad948c8630be15901514ec9e5e5fcd20.zip
Diffstat (limited to '')
-rw-r--r--src/shader_recompiler/frontend/maxwell/translate/impl/texture_gather.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/texture_gather.cpp b/src/shader_recompiler/frontend/maxwell/translate/impl/texture_gather.cpp
index 8c6384040..cdf5cb5c4 100644
--- a/src/shader_recompiler/frontend/maxwell/translate/impl/texture_gather.cpp
+++ b/src/shader_recompiler/frontend/maxwell/translate/impl/texture_gather.cpp
@@ -106,17 +106,17 @@ IR::Value MakeOffset(TranslatorVisitor& v, IR::Reg& reg, TextureType type) {
throw NotImplementedException("Invalid texture type {}", type);
}
-std::pair<IR::Value, IR::Value> MakeOffsetPTP(TranslatorVisitor& v, IR::Reg& reg) {
+IR::Value MakeOffsetPTP(TranslatorVisitor& v, IR::Reg& reg) {
const IR::U32 value1{v.X(reg++)};
const IR::U32 value2{v.X(reg++)};
- const auto getVector = ([&v](const IR::U32& value) {
+ const IR::U32 bitsize = v.ir.Imm32(6);
+ const auto getVector = ([&v, &bitsize](const IR::U32& value, u32 base) {
return v.ir.CompositeConstruct(
- v.ir.BitFieldExtract(value, v.ir.Imm32(0), v.ir.Imm32(6), true),
- v.ir.BitFieldExtract(value, v.ir.Imm32(8), v.ir.Imm32(6), true),
- v.ir.BitFieldExtract(value, v.ir.Imm32(16), v.ir.Imm32(6), true),
- v.ir.BitFieldExtract(value, v.ir.Imm32(24), v.ir.Imm32(6), true));
+ v.ir.BitFieldExtract(value, v.ir.Imm32(base + 0), bitsize, true),
+ v.ir.BitFieldExtract(value, v.ir.Imm32(base + 8), bitsize, true));
});
- return {getVector(value1), getVector(value2)};
+ return v.ir.CompositeConstruct(getVector(value1, 0), getVector(value1, 16),
+ getVector(value2, 0), getVector(value2, 16));
}
void Impl(TranslatorVisitor& v, u64 insn, ComponentType component_type, OffsetType offset_type,
@@ -155,7 +155,7 @@ void Impl(TranslatorVisitor& v, u64 insn, ComponentType component_type, OffsetTy
break;
}
case OffsetType::PTP: {
- std::tie(offset, offset2) = MakeOffsetPTP(v, meta_reg);
+ offset2 = MakeOffsetPTP(v, meta_reg);
break;
}
default: