summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ameerj2021-06-20 01:40:21 -0400
committerGravatar ameerj2021-07-22 21:51:39 -0400
commit3a2dd1b48310e2912e7f7f90da15bff555ef7256 (patch)
tree873c0d23ee8b69723e0648152b7c5c09e04ec03a /src
parentgl_graphics_pipeline: Inline hash and operator== key functions (diff)
downloadyuzu-3a2dd1b48310e2912e7f7f90da15bff555ef7256.tar.gz
yuzu-3a2dd1b48310e2912e7f7f90da15bff555ef7256.tar.xz
yuzu-3a2dd1b48310e2912e7f7f90da15bff555ef7256.zip
glasm: Implement SetAttribute ViewportMask
Diffstat (limited to '')
-rw-r--r--src/shader_recompiler/backend/glasm/emit_glasm.cpp3
-rw-r--r--src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp8
2 files changed, 10 insertions, 1 deletions
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm.cpp b/src/shader_recompiler/backend/glasm/emit_glasm.cpp
index 66e4aea04..f39b02f77 100644
--- a/src/shader_recompiler/backend/glasm/emit_glasm.cpp
+++ b/src/shader_recompiler/backend/glasm/emit_glasm.cpp
@@ -286,7 +286,8 @@ void SetupOptions(const IR::Program& program, const Profile& profile,
286 if (info.uses_sparse_residency) { 286 if (info.uses_sparse_residency) {
287 header += "OPTION EXT_sparse_texture2;"; 287 header += "OPTION EXT_sparse_texture2;";
288 } 288 }
289 if ((info.stores_viewport_index || info.stores_layer) && stage != Stage::Geometry) { 289 if (((info.stores_viewport_index || info.stores_layer) && stage != Stage::Geometry) ||
290 info.stores_viewport_mask) {
290 if (profile.support_viewport_index_layer_non_geometry) { 291 if (profile.support_viewport_index_layer_non_geometry) {
291 header += "OPTION NV_viewport_array2;"; 292 header += "OPTION NV_viewport_array2;";
292 } 293 }
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp b/src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp
index 20b925877..bc195d248 100644
--- a/src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp
+++ b/src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp
@@ -157,6 +157,14 @@ void EmitSetAttribute(EmitContext& ctx, IR::Attribute attr, ScalarF32 value,
157 "Viewport stored outside of geometry shader not supported by device"); 157 "Viewport stored outside of geometry shader not supported by device");
158 } 158 }
159 break; 159 break;
160 case IR::Attribute::ViewportMask:
161 // NV_viewport_array2 is required to access result.viewportmask, regardless of shader stage.
162 if (ctx.profile.support_viewport_index_layer_non_geometry) {
163 ctx.Add("MOV.F result.viewportmask[0].x,{};", value);
164 } else {
165 LOG_WARNING(Shader_GLASM, "Device does not support storing to ViewportMask");
166 }
167 break;
160 case IR::Attribute::PointSize: 168 case IR::Attribute::PointSize:
161 ctx.Add("MOV.F result.pointsize.x,{};", value); 169 ctx.Add("MOV.F result.pointsize.x,{};", value);
162 break; 170 break;