diff options
Diffstat (limited to 'src/shader_recompiler/backend/glasm/emit_glasm.cpp')
| -rw-r--r-- | src/shader_recompiler/backend/glasm/emit_glasm.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm.cpp b/src/shader_recompiler/backend/glasm/emit_glasm.cpp index edff04a44..0c2bbf284 100644 --- a/src/shader_recompiler/backend/glasm/emit_glasm.cpp +++ b/src/shader_recompiler/backend/glasm/emit_glasm.cpp | |||
| @@ -261,7 +261,8 @@ void EmitCode(EmitContext& ctx, const IR::Program& program) { | |||
| 261 | } | 261 | } |
| 262 | } | 262 | } |
| 263 | 263 | ||
| 264 | void SetupOptions(const IR::Program& program, const Profile& profile, std::string& header) { | 264 | void SetupOptions(const IR::Program& program, const Profile& profile, |
| 265 | const RuntimeInfo& runtime_info, std::string& header) { | ||
| 265 | const Info& info{program.info}; | 266 | const Info& info{program.info}; |
| 266 | const Stage stage{program.stage}; | 267 | const Stage stage{program.stage}; |
| 267 | 268 | ||
| @@ -296,6 +297,9 @@ void SetupOptions(const IR::Program& program, const Profile& profile, std::strin | |||
| 296 | header += "OPTION NV_viewport_array2;"; | 297 | header += "OPTION NV_viewport_array2;"; |
| 297 | } | 298 | } |
| 298 | } | 299 | } |
| 300 | if (stage == Stage::Fragment && runtime_info.force_early_z != 0) { | ||
| 301 | header += "OPTION NV_early_fragment_tests;"; | ||
| 302 | } | ||
| 299 | const auto non_zero_frag_colors{info.stores_frag_color | std::views::drop(1)}; | 303 | const auto non_zero_frag_colors{info.stores_frag_color | std::views::drop(1)}; |
| 300 | if (std::ranges::find(non_zero_frag_colors, true) != non_zero_frag_colors.end()) { | 304 | if (std::ranges::find(non_zero_frag_colors, true) != non_zero_frag_colors.end()) { |
| 301 | header += "OPTION ARB_draw_buffers;"; | 305 | header += "OPTION ARB_draw_buffers;"; |
| @@ -380,7 +384,7 @@ std::string EmitGLASM(const Profile& profile, const RuntimeInfo& runtime_info, I | |||
| 380 | Precolor(ctx, program); | 384 | Precolor(ctx, program); |
| 381 | EmitCode(ctx, program); | 385 | EmitCode(ctx, program); |
| 382 | std::string header{StageHeader(program.stage)}; | 386 | std::string header{StageHeader(program.stage)}; |
| 383 | SetupOptions(program, profile, header); | 387 | SetupOptions(program, profile, runtime_info, header); |
| 384 | switch (program.stage) { | 388 | switch (program.stage) { |
| 385 | case Stage::TessellationControl: | 389 | case Stage::TessellationControl: |
| 386 | header += fmt::format("VERTICES_OUT {};", program.invocations); | 390 | header += fmt::format("VERTICES_OUT {};", program.invocations); |