summaryrefslogtreecommitdiffstats
path: root/src/video_core/shader
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2019-03-27 00:46:11 +0100
committerFernandoS27 <fsahmkow27@gmail.com>2019-04-08 17:29:52 +0200
commit4841440382c72047d68bb2c0ce7a7defadab7d3d (patch)
tree849c245021c01d8a121e6d1cbbf25e04d0fed906 /src/video_core/shader
parentImplement TMML_B (diff)
downloadyuzu-4841440382c72047d68bb2c0ce7a7defadab7d3d.tar
yuzu-4841440382c72047d68bb2c0ce7a7defadab7d3d.tar.gz
yuzu-4841440382c72047d68bb2c0ce7a7defadab7d3d.tar.bz2
yuzu-4841440382c72047d68bb2c0ce7a7defadab7d3d.tar.lz
yuzu-4841440382c72047d68bb2c0ce7a7defadab7d3d.tar.xz
yuzu-4841440382c72047d68bb2c0ce7a7defadab7d3d.tar.zst
yuzu-4841440382c72047d68bb2c0ce7a7defadab7d3d.zip
Diffstat (limited to 'src/video_core/shader')
-rw-r--r--src/video_core/shader/decode/texture.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/video_core/shader/decode/texture.cpp b/src/video_core/shader/decode/texture.cpp
index ddb7755b8..3eac75bef 100644
--- a/src/video_core/shader/decode/texture.cpp
+++ b/src/video_core/shader/decode/texture.cpp
@@ -151,6 +151,8 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) {
WriteTexsInstructionFloat(bb, instr, values);
break;
}
+ case OpCode::Id::TXQ_B:
+ is_bindless = true;
case OpCode::Id::TXQ: {
if (instr.txq.UsesMiscMode(TextureMiscMode::NODEP)) {
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
// uses. This must be fixed at a later instance.
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;
switch (instr.txq.query_type) {
@@ -171,7 +176,8 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) {
}
MetaTexture meta{sampler, {}, {}, {}, {}, {}, {}, element};
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);
}
for (u32 i = 0; i < indexer; ++i) {