diff options
author | FernandoS27 <fsahmkow27@gmail.com> | 2021-04-01 08:34:45 +0200 |
---|---|---|
committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-07-23 03:51:25 +0200 |
commit | d819ba4489b90955286341c739083e638173b938 (patch) | |
tree | c0210cabb9dd5a0a7ee3df3a4c36c4135c51ac91 /src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp | |
parent | shader: Stub TLD4's PTP when it isn't constant (diff) | |
download | yuzu-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.cpp | 10 |
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&) { |