summaryrefslogtreecommitdiffstats
path: root/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
diff options
context:
space:
mode:
authorFernandoS27 <fsahmkow27@gmail.com>2021-04-01 08:34:45 +0200
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:25 +0200
commitd819ba4489b90955286341c739083e638173b938 (patch)
treec0210cabb9dd5a0a7ee3df3a4c36c4135c51ac91 /src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
parentshader: Stub TLD4's PTP when it isn't constant (diff)
downloadyuzu-d819ba4489b90955286341c739083e638173b938.tar
yuzu-d819ba4489b90955286341c739083e638173b938.tar.gz
yuzu-d819ba4489b90955286341c739083e638173b938.tar.bz2
yuzu-d819ba4489b90955286341c739083e638173b938.tar.lz
yuzu-d819ba4489b90955286341c739083e638173b938.tar.xz
yuzu-d819ba4489b90955286341c739083e638173b938.tar.zst
yuzu-d819ba4489b90955286341c739083e638173b938.zip
Diffstat (limited to 'src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp')
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
index 2eaeb29de..e42407f1f 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
@@ -29,7 +29,7 @@ std::optional<AttrInfo> AttrTypes(EmitContext& ctx, u32 index) {
throw InvalidArgument("Invalid attribute type {}", type);
}
-Id OutputAttrPointer(EmitContext& ctx, IR::Attribute attr) {
+std::optional<Id> OutputAttrPointer(EmitContext& ctx, IR::Attribute attr) {
const u32 element{static_cast<u32>(attr) % 4};
const auto element_id{[&] { return ctx.Constant(ctx.U32[1], element); }};
if (IR::IsGeneric(attr)) {
@@ -57,6 +57,8 @@ Id OutputAttrPointer(EmitContext& ctx, IR::Attribute attr) {
const Id clip_num{ctx.Constant(ctx.U32[1], index)};
return ctx.OpAccessChain(ctx.output_f32, ctx.clip_distances, clip_num);
}
+ case IR::Attribute::ViewportIndex:
+ return ctx.ignore_viewport_layer ? std::nullopt : std::optional<Id>{ctx.viewport_index};
default:
throw NotImplementedException("Read attribute {}", attr);
}
@@ -204,7 +206,11 @@ Id EmitGetAttribute(EmitContext& ctx, IR::Attribute attr) {
}
void EmitSetAttribute(EmitContext& ctx, IR::Attribute attr, Id value) {
- ctx.OpStore(OutputAttrPointer(ctx, attr), value);
+ auto output = OutputAttrPointer(ctx, attr);
+ if (!output) {
+ return;
+ }
+ ctx.OpStore(*output, value);
}
void EmitGetAttributeIndexed(EmitContext&) {