diff options
Diffstat (limited to 'src/shader_recompiler/backend')
| -rw-r--r-- | src/shader_recompiler/backend/glsl/emit_context.cpp | 2 | ||||
| -rw-r--r-- | src/shader_recompiler/backend/glsl/emit_glsl_special.cpp | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/src/shader_recompiler/backend/glsl/emit_context.cpp b/src/shader_recompiler/backend/glsl/emit_context.cpp index d224c4d84..54aa88b63 100644 --- a/src/shader_recompiler/backend/glsl/emit_context.cpp +++ b/src/shader_recompiler/backend/glsl/emit_context.cpp | |||
| @@ -340,7 +340,7 @@ EmitContext::EmitContext(IR::Program& program, Bindings& bindings, const Profile | |||
| 340 | header += fmt::format("layout(location={})patch {} vec4 patch{};", index, qualifier, index); | 340 | header += fmt::format("layout(location={})patch {} vec4 patch{};", index, qualifier, index); |
| 341 | } | 341 | } |
| 342 | for (size_t index = 0; index < info.stores_frag_color.size(); ++index) { | 342 | for (size_t index = 0; index < info.stores_frag_color.size(); ++index) { |
| 343 | if (!info.stores_frag_color[index]) { | 343 | if (!info.stores_frag_color[index] && !profile.need_declared_frag_colors) { |
| 344 | continue; | 344 | continue; |
| 345 | } | 345 | } |
| 346 | header += fmt::format("layout(location={})out vec4 frag_color{};", index, index); | 346 | header += fmt::format("layout(location={})out vec4 frag_color{};", index, index); |
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_special.cpp b/src/shader_recompiler/backend/glsl/emit_glsl_special.cpp index 59ca52f07..f8e8aaa67 100644 --- a/src/shader_recompiler/backend/glsl/emit_glsl_special.cpp +++ b/src/shader_recompiler/backend/glsl/emit_glsl_special.cpp | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #include "shader_recompiler/backend/glsl/emit_glsl_instructions.h" | 8 | #include "shader_recompiler/backend/glsl/emit_glsl_instructions.h" |
| 9 | #include "shader_recompiler/frontend/ir/program.h" | 9 | #include "shader_recompiler/frontend/ir/program.h" |
| 10 | #include "shader_recompiler/frontend/ir/value.h" | 10 | #include "shader_recompiler/frontend/ir/value.h" |
| 11 | #include "shader_recompiler/profile.h" | ||
| 11 | 12 | ||
| 12 | namespace Shader::Backend::GLSL { | 13 | namespace Shader::Backend::GLSL { |
| 13 | namespace { | 14 | namespace { |
| @@ -58,6 +59,14 @@ void EmitPrologue(EmitContext& ctx) { | |||
| 58 | if (ctx.StageInitializesVaryings()) { | 59 | if (ctx.StageInitializesVaryings()) { |
| 59 | InitializeVaryings(ctx); | 60 | InitializeVaryings(ctx); |
| 60 | } | 61 | } |
| 62 | if (ctx.stage == Stage::Fragment && ctx.profile.need_declared_frag_colors) { | ||
| 63 | for (size_t index = 0; index < ctx.info.stores_frag_color.size(); ++index) { | ||
| 64 | if (ctx.info.stores_frag_color[index]) { | ||
| 65 | continue; | ||
| 66 | } | ||
| 67 | ctx.Add("frag_color{}=vec4(0,0,0,1);", index); | ||
| 68 | } | ||
| 69 | } | ||
| 61 | } | 70 | } |
| 62 | 71 | ||
| 63 | void EmitEpilogue(EmitContext&) {} | 72 | void EmitEpilogue(EmitContext&) {} |