diff options
| author | 2022-01-03 00:39:59 +0100 | |
|---|---|---|
| committer | 2022-01-03 00:39:59 +0100 | |
| commit | ae7da0b12dd8aef115d741eb60d00ddf8ed357df (patch) | |
| tree | 09d269fe3838d1f8aa5672d2af06cbeb9b45d81f /src/shader_recompiler/backend/glasm | |
| parent | Merge pull request #7659 from ameerj/overlap-overflow (diff) | |
| parent | glsl: Add boolean reference workaround (diff) | |
| download | yuzu-ae7da0b12dd8aef115d741eb60d00ddf8ed357df.tar.gz yuzu-ae7da0b12dd8aef115d741eb60d00ddf8ed357df.tar.xz yuzu-ae7da0b12dd8aef115d741eb60d00ddf8ed357df.zip | |
Merge pull request #7629 from ameerj/nv-driver-fixes
shaders: Add fixes for NVIDIA drivers 495+
Diffstat (limited to 'src/shader_recompiler/backend/glasm')
| -rw-r--r-- | src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp | 16 | ||||
| -rw-r--r-- | src/shader_recompiler/backend/glasm/emit_glasm_instructions.h | 1 |
2 files changed, 17 insertions, 0 deletions
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 6f98d0998..7434a1f92 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 | |||
| @@ -126,6 +126,22 @@ void EmitGetAttribute(EmitContext& ctx, IR::Inst& inst, IR::Attribute attr, Scal | |||
| 126 | } | 126 | } |
| 127 | } | 127 | } |
| 128 | 128 | ||
| 129 | void EmitGetAttributeU32(EmitContext& ctx, IR::Inst& inst, IR::Attribute attr, ScalarU32) { | ||
| 130 | switch (attr) { | ||
| 131 | case IR::Attribute::PrimitiveId: | ||
| 132 | ctx.Add("MOV.S {}.x,primitive.id;", inst); | ||
| 133 | break; | ||
| 134 | case IR::Attribute::InstanceId: | ||
| 135 | ctx.Add("MOV.S {}.x,{}.instance;", inst, ctx.attrib_name); | ||
| 136 | break; | ||
| 137 | case IR::Attribute::VertexId: | ||
| 138 | ctx.Add("MOV.S {}.x,{}.id;", inst, ctx.attrib_name); | ||
| 139 | break; | ||
| 140 | default: | ||
| 141 | throw NotImplementedException("Get U32 attribute {}", attr); | ||
| 142 | } | ||
| 143 | } | ||
| 144 | |||
| 129 | void EmitSetAttribute(EmitContext& ctx, IR::Attribute attr, ScalarF32 value, | 145 | void EmitSetAttribute(EmitContext& ctx, IR::Attribute attr, ScalarF32 value, |
| 130 | [[maybe_unused]] ScalarU32 vertex) { | 146 | [[maybe_unused]] ScalarU32 vertex) { |
| 131 | const u32 element{static_cast<u32>(attr) % 4}; | 147 | const u32 element{static_cast<u32>(attr) % 4}; |
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h b/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h index 1f343bff5..b48007856 100644 --- a/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h +++ b/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h | |||
| @@ -50,6 +50,7 @@ void EmitGetCbufU32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, | |||
| 50 | void EmitGetCbufF32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, ScalarU32 offset); | 50 | void EmitGetCbufF32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, ScalarU32 offset); |
| 51 | void EmitGetCbufU32x2(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, ScalarU32 offset); | 51 | void EmitGetCbufU32x2(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, ScalarU32 offset); |
| 52 | void EmitGetAttribute(EmitContext& ctx, IR::Inst& inst, IR::Attribute attr, ScalarU32 vertex); | 52 | void EmitGetAttribute(EmitContext& ctx, IR::Inst& inst, IR::Attribute attr, ScalarU32 vertex); |
| 53 | void EmitGetAttributeU32(EmitContext& ctx, IR::Inst& inst, IR::Attribute attr, ScalarU32 vertex); | ||
| 53 | void EmitSetAttribute(EmitContext& ctx, IR::Attribute attr, ScalarF32 value, ScalarU32 vertex); | 54 | void EmitSetAttribute(EmitContext& ctx, IR::Attribute attr, ScalarF32 value, ScalarU32 vertex); |
| 54 | void EmitGetAttributeIndexed(EmitContext& ctx, IR::Inst& inst, ScalarS32 offset, ScalarU32 vertex); | 55 | void EmitGetAttributeIndexed(EmitContext& ctx, IR::Inst& inst, ScalarS32 offset, ScalarU32 vertex); |
| 55 | void EmitSetAttributeIndexed(EmitContext& ctx, ScalarU32 offset, ScalarF32 value, ScalarU32 vertex); | 56 | void EmitSetAttributeIndexed(EmitContext& ctx, ScalarU32 offset, ScalarF32 value, ScalarU32 vertex); |