diff options
Diffstat (limited to 'src/shader_recompiler/backend')
| -rw-r--r-- | src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp | 8 | ||||
| -rw-r--r-- | src/shader_recompiler/backend/spirv/emit_spirv.cpp | 9 |
2 files changed, 13 insertions, 4 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 c0f5fc402..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 | |||
| @@ -86,7 +86,7 @@ void EmitGetAttribute(EmitContext& ctx, IR::Inst& inst, IR::Attribute attr, Scal | |||
| 86 | } | 86 | } |
| 87 | switch (attr) { | 87 | switch (attr) { |
| 88 | case IR::Attribute::PrimitiveId: | 88 | case IR::Attribute::PrimitiveId: |
| 89 | ctx.Add("MOV.S {}.x,primitive.id;", inst); | 89 | ctx.Add("MOV.F {}.x,primitive.id;", inst); |
| 90 | break; | 90 | break; |
| 91 | case IR::Attribute::PositionX: | 91 | case IR::Attribute::PositionX: |
| 92 | case IR::Attribute::PositionY: | 92 | case IR::Attribute::PositionY: |
| @@ -113,13 +113,13 @@ void EmitGetAttribute(EmitContext& ctx, IR::Inst& inst, IR::Attribute attr, Scal | |||
| 113 | ctx.Add("MOV.F {}.x,vertex.tesscoord.{};", inst, swizzle); | 113 | ctx.Add("MOV.F {}.x,vertex.tesscoord.{};", inst, swizzle); |
| 114 | break; | 114 | break; |
| 115 | case IR::Attribute::InstanceId: | 115 | case IR::Attribute::InstanceId: |
| 116 | ctx.Add("MOV.S {}.x,{}.instance;", inst, ctx.attrib_name); | 116 | ctx.Add("MOV.F {}.x,{}.instance;", inst, ctx.attrib_name); |
| 117 | break; | 117 | break; |
| 118 | case IR::Attribute::VertexId: | 118 | case IR::Attribute::VertexId: |
| 119 | ctx.Add("MOV.S {}.x,{}.id;", inst, ctx.attrib_name); | 119 | ctx.Add("MOV.F {}.x,{}.id;", inst, ctx.attrib_name); |
| 120 | break; | 120 | break; |
| 121 | case IR::Attribute::FrontFace: | 121 | case IR::Attribute::FrontFace: |
| 122 | ctx.Add("CMP.S {}.x,{}.facing.x,0,-1;", inst, ctx.attrib_name); | 122 | ctx.Add("CMP.F {}.x,{}.facing.x,0,-1;", inst, ctx.attrib_name); |
| 123 | break; | 123 | break; |
| 124 | default: | 124 | default: |
| 125 | throw NotImplementedException("Get attribute {}", attr); | 125 | throw NotImplementedException("Get attribute {}", attr); |
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv.cpp b/src/shader_recompiler/backend/spirv/emit_spirv.cpp index 6ce7ed12a..50918317f 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv.cpp +++ b/src/shader_recompiler/backend/spirv/emit_spirv.cpp | |||
| @@ -30,11 +30,20 @@ struct FuncTraits<ReturnType_ (*)(Args...)> { | |||
| 30 | using ArgType = std::tuple_element_t<I, std::tuple<Args...>>; | 30 | using ArgType = std::tuple_element_t<I, std::tuple<Args...>>; |
| 31 | }; | 31 | }; |
| 32 | 32 | ||
| 33 | #ifdef _MSC_VER | ||
| 34 | #pragma warning(push) | ||
| 35 | #pragma warning(disable : 4702) // Ignore unreachable code warning | ||
| 36 | #endif | ||
| 37 | |||
| 33 | template <auto func, typename... Args> | 38 | template <auto func, typename... Args> |
| 34 | void SetDefinition(EmitContext& ctx, IR::Inst* inst, Args... args) { | 39 | void SetDefinition(EmitContext& ctx, IR::Inst* inst, Args... args) { |
| 35 | inst->SetDefinition<Id>(func(ctx, std::forward<Args>(args)...)); | 40 | inst->SetDefinition<Id>(func(ctx, std::forward<Args>(args)...)); |
| 36 | } | 41 | } |
| 37 | 42 | ||
| 43 | #ifdef _MSC_VER | ||
| 44 | #pragma warning(pop) | ||
| 45 | #endif | ||
| 46 | |||
| 38 | template <typename ArgType> | 47 | template <typename ArgType> |
| 39 | ArgType Arg(EmitContext& ctx, const IR::Value& arg) { | 48 | ArgType Arg(EmitContext& ctx, const IR::Value& arg) { |
| 40 | if constexpr (std::is_same_v<ArgType, Id>) { | 49 | if constexpr (std::is_same_v<ArgType, Id>) { |