Browse Source

ShaderGen: Register id 255 is special and is hardcoded to return 0 (SR_ZERO).

nce_cpp
Subv 8 years ago
parent
commit
601c5d9d93
  1. 3
      src/video_core/engines/shader_bytecode.h
  2. 2
      src/video_core/renderer_opengl/gl_shader_decompiler.cpp

3
src/video_core/engines/shader_bytecode.h

@ -13,6 +13,9 @@ namespace Tegra {
namespace Shader {
struct Register {
// Register 255 is special cased to always be 0
static constexpr size_t ZeroIndex = 255;
constexpr Register() = default;
constexpr Register(u64 value) : value(value) {}

2
src/video_core/renderer_opengl/gl_shader_decompiler.cpp

@ -220,6 +220,8 @@ private:
/// Generates code representing a temporary (GPR) register.
std::string GetRegister(const Register& reg, unsigned elem = 0) {
if (reg == Register::ZeroIndex)
return "0";
if (stage == Maxwell3D::Regs::ShaderStage::Fragment && reg < 4) {
// GPRs 0-3 are output color for the fragment shader
return std::string{"color."} + "rgba"[(reg + elem) & 3];

Loading…
Cancel
Save