summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_decompiler.cpp12
1 files changed, 4 insertions, 8 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
index 3067ce3b3..999b1e561 100644
--- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
@@ -1112,13 +1112,11 @@ private:
1112 break; 1112 break;
1113 } 1113 }
1114 case OpCode::Type::Memory: { 1114 case OpCode::Type::Memory: {
1115 const Attribute::Index attribute = instr.attribute.fmt20.index;
1116
1117 switch (opcode->GetId()) { 1115 switch (opcode->GetId()) {
1118 case OpCode::Id::LD_A: { 1116 case OpCode::Id::LD_A: {
1119 ASSERT_MSG(instr.attribute.fmt20.size == 0, "untested"); 1117 ASSERT_MSG(instr.attribute.fmt20.size == 0, "untested");
1120 regs.SetRegisterToInputAttibute(instr.gpr0, instr.attribute.fmt20.element, 1118 regs.SetRegisterToInputAttibute(instr.gpr0, instr.attribute.fmt20.element,
1121 attribute); 1119 instr.attribute.fmt20.index);
1122 break; 1120 break;
1123 } 1121 }
1124 case OpCode::Id::LD_C: { 1122 case OpCode::Id::LD_C: {
@@ -1150,12 +1148,11 @@ private:
1150 } 1148 }
1151 case OpCode::Id::ST_A: { 1149 case OpCode::Id::ST_A: {
1152 ASSERT_MSG(instr.attribute.fmt20.size == 0, "untested"); 1150 ASSERT_MSG(instr.attribute.fmt20.size == 0, "untested");
1153 regs.SetOutputAttributeToRegister(attribute, instr.attribute.fmt20.element, 1151 regs.SetOutputAttributeToRegister(instr.attribute.fmt20.index,
1154 instr.gpr0); 1152 instr.attribute.fmt20.element, instr.gpr0);
1155 break; 1153 break;
1156 } 1154 }
1157 case OpCode::Id::TEX: { 1155 case OpCode::Id::TEX: {
1158 ASSERT_MSG(instr.attribute.fmt20.size == 4, "untested");
1159 const std::string op_a = regs.GetRegisterAsFloat(instr.gpr8); 1156 const std::string op_a = regs.GetRegisterAsFloat(instr.gpr8);
1160 const std::string op_b = regs.GetRegisterAsFloat(instr.gpr8.Value() + 1); 1157 const std::string op_b = regs.GetRegisterAsFloat(instr.gpr8.Value() + 1);
1161 const std::string sampler = GetSampler(instr.sampler); 1158 const std::string sampler = GetSampler(instr.sampler);
@@ -1168,7 +1165,7 @@ private:
1168 const std::string texture = "texture(" + sampler + ", coords)"; 1165 const std::string texture = "texture(" + sampler + ", coords)";
1169 1166
1170 size_t dest_elem{}; 1167 size_t dest_elem{};
1171 for (size_t elem = 0; elem < instr.attribute.fmt20.size; ++elem) { 1168 for (size_t elem = 0; elem < 4; ++elem) {
1172 if (!instr.tex.IsComponentEnabled(elem)) { 1169 if (!instr.tex.IsComponentEnabled(elem)) {
1173 // Skip disabled components 1170 // Skip disabled components
1174 continue; 1171 continue;
@@ -1181,7 +1178,6 @@ private:
1181 break; 1178 break;
1182 } 1179 }
1183 case OpCode::Id::TEXS: { 1180 case OpCode::Id::TEXS: {
1184 ASSERT_MSG(instr.attribute.fmt20.size == 4, "untested");
1185 const std::string op_a = regs.GetRegisterAsFloat(instr.gpr8); 1181 const std::string op_a = regs.GetRegisterAsFloat(instr.gpr8);
1186 const std::string op_b = regs.GetRegisterAsFloat(instr.gpr20); 1182 const std::string op_b = regs.GetRegisterAsFloat(instr.gpr20);
1187 const std::string sampler = GetSampler(instr.sampler); 1183 const std::string sampler = GetSampler(instr.sampler);