summaryrefslogtreecommitdiffstats
path: root/src/shader_recompiler/backend/glasm/emit_glasm.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2021-05-19 21:32:03 +0200
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:32 +0200
commitaccad56ee7cc9f77886d164701a35f1e89a3519b (patch)
tree34b272f1f70d0c4d926877c4e960ccec0084ce17 /src/shader_recompiler/backend/glasm/emit_glasm.cpp
parentglasm: Implement gl_PointSize stores (diff)
downloadyuzu-accad56ee7cc9f77886d164701a35f1e89a3519b.tar
yuzu-accad56ee7cc9f77886d164701a35f1e89a3519b.tar.gz
yuzu-accad56ee7cc9f77886d164701a35f1e89a3519b.tar.bz2
yuzu-accad56ee7cc9f77886d164701a35f1e89a3519b.tar.lz
yuzu-accad56ee7cc9f77886d164701a35f1e89a3519b.tar.xz
yuzu-accad56ee7cc9f77886d164701a35f1e89a3519b.tar.zst
yuzu-accad56ee7cc9f77886d164701a35f1e89a3519b.zip
Diffstat (limited to '')
-rw-r--r--src/shader_recompiler/backend/glasm/emit_glasm.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm.cpp b/src/shader_recompiler/backend/glasm/emit_glasm.cpp
index edf6f5e13..9dc0cacbe 100644
--- a/src/shader_recompiler/backend/glasm/emit_glasm.cpp
+++ b/src/shader_recompiler/backend/glasm/emit_glasm.cpp
@@ -261,7 +261,10 @@ void EmitCode(EmitContext& ctx, const IR::Program& program) {
}
}
-void SetupOptions(std::string& header, Info info) {
+void SetupOptions(const IR::Program& program, const Profile& profile, std::string& header) {
+ const Info& info{program.info};
+ const Stage stage{program.stage};
+
// TODO: Track the shared atomic ops
header += "OPTION NV_internal;"
"OPTION NV_shader_storage_buffer;"
@@ -286,6 +289,11 @@ void SetupOptions(std::string& header, Info info) {
if (info.uses_sparse_residency) {
header += "OPTION EXT_sparse_texture2;";
}
+ if ((info.stores_viewport_index || info.stores_layer) && stage != Stage::Geometry) {
+ if (profile.support_viewport_index_layer_non_geometry) {
+ header += "OPTION NV_viewport_array2;";
+ }
+ }
const auto non_zero_frag_colors{info.stores_frag_color | std::views::drop(1)};
if (std::ranges::find(non_zero_frag_colors, true) != non_zero_frag_colors.end()) {
header += "OPTION ARB_draw_buffers;";
@@ -312,12 +320,12 @@ std::string_view StageHeader(Stage stage) {
}
} // Anonymous namespace
-std::string EmitGLASM(const Profile&, IR::Program& program, Bindings& bindings) {
- EmitContext ctx{program, bindings};
+std::string EmitGLASM(const Profile& profile, IR::Program& program, Bindings& bindings) {
+ EmitContext ctx{program, bindings, profile};
Precolor(ctx, program);
EmitCode(ctx, program);
std::string header{StageHeader(program.stage)};
- SetupOptions(header, program.info);
+ SetupOptions(program, profile, header);
switch (program.stage) {
case Stage::Compute:
header += fmt::format("GROUP_SIZE {} {} {};", program.workgroup_size[0],