summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Subv2018-04-20 09:04:54 -0500
committerGravatar Subv2018-04-20 14:57:40 -0500
commitd03fc774756306aa8fd89abd5522c928b46336c7 (patch)
tree89b74e72ec1dafe6889a34826e383e45c1f80def /src
parentShaderGen: Ignore the 'sched' instruction when generating shaders. (diff)
downloadyuzu-d03fc774756306aa8fd89abd5522c928b46336c7.tar.gz
yuzu-d03fc774756306aa8fd89abd5522c928b46336c7.tar.xz
yuzu-d03fc774756306aa8fd89abd5522c928b46336c7.zip
ShaderGen: Register id 255 is special and is hardcoded to return 0 (SR_ZERO).
Diffstat (limited to 'src')
-rw-r--r--src/video_core/engines/shader_bytecode.h3
-rw-r--r--src/video_core/renderer_opengl/gl_shader_decompiler.cpp2
2 files changed, 5 insertions, 0 deletions
diff --git a/src/video_core/engines/shader_bytecode.h b/src/video_core/engines/shader_bytecode.h
index 7cd125f05..b0da805db 100644
--- a/src/video_core/engines/shader_bytecode.h
+++ b/src/video_core/engines/shader_bytecode.h
@@ -13,6 +13,9 @@ namespace Tegra {
13namespace Shader { 13namespace Shader {
14 14
15struct Register { 15struct Register {
16 // Register 255 is special cased to always be 0
17 static constexpr size_t ZeroIndex = 255;
18
16 constexpr Register() = default; 19 constexpr Register() = default;
17 20
18 constexpr Register(u64 value) : value(value) {} 21 constexpr Register(u64 value) : value(value) {}
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
index c23f590cd..6db0b7d39 100644
--- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
@@ -220,6 +220,8 @@ private:
220 220
221 /// Generates code representing a temporary (GPR) register. 221 /// Generates code representing a temporary (GPR) register.
222 std::string GetRegister(const Register& reg, unsigned elem = 0) { 222 std::string GetRegister(const Register& reg, unsigned elem = 0) {
223 if (reg == Register::ZeroIndex)
224 return "0";
223 if (stage == Maxwell3D::Regs::ShaderStage::Fragment && reg < 4) { 225 if (stage == Maxwell3D::Regs::ShaderStage::Fragment && reg < 4) {
224 // GPRs 0-3 are output color for the fragment shader 226 // GPRs 0-3 are output color for the fragment shader
225 return std::string{"color."} + "rgba"[(reg + elem) & 3]; 227 return std::string{"color."} + "rgba"[(reg + elem) & 3];