diff options
Diffstat (limited to 'src/shader_recompiler/backend/glsl')
8 files changed, 13 insertions, 43 deletions
diff --git a/src/shader_recompiler/backend/glsl/emit_context.h b/src/shader_recompiler/backend/glsl/emit_context.h index 0d18abe90..9d8be0c9a 100644 --- a/src/shader_recompiler/backend/glsl/emit_context.h +++ b/src/shader_recompiler/backend/glsl/emit_context.h | |||
| @@ -70,21 +70,11 @@ public: | |||
| 70 | } | 70 | } |
| 71 | 71 | ||
| 72 | template <typename... Args> | 72 | template <typename... Args> |
| 73 | void AddS32(const char* format_str, IR::Inst& inst, Args&&... args) { | ||
| 74 | Add<GlslVarType::S32>(format_str, inst, args...); | ||
| 75 | } | ||
| 76 | |||
| 77 | template <typename... Args> | ||
| 78 | void AddF32(const char* format_str, IR::Inst& inst, Args&&... args) { | 73 | void AddF32(const char* format_str, IR::Inst& inst, Args&&... args) { |
| 79 | Add<GlslVarType::F32>(format_str, inst, args...); | 74 | Add<GlslVarType::F32>(format_str, inst, args...); |
| 80 | } | 75 | } |
| 81 | 76 | ||
| 82 | template <typename... Args> | 77 | template <typename... Args> |
| 83 | void AddS64(const char* format_str, IR::Inst& inst, Args&&... args) { | ||
| 84 | Add<GlslVarType::S64>(format_str, inst, args...); | ||
| 85 | } | ||
| 86 | |||
| 87 | template <typename... Args> | ||
| 88 | void AddU64(const char* format_str, IR::Inst& inst, Args&&... args) { | 78 | void AddU64(const char* format_str, IR::Inst& inst, Args&&... args) { |
| 89 | Add<GlslVarType::U64>(format_str, inst, args...); | 79 | Add<GlslVarType::U64>(format_str, inst, args...); |
| 90 | } | 80 | } |
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_atomic.cpp b/src/shader_recompiler/backend/glsl/emit_glsl_atomic.cpp index 7353d5d4e..850eee1e1 100644 --- a/src/shader_recompiler/backend/glsl/emit_glsl_atomic.cpp +++ b/src/shader_recompiler/backend/glsl/emit_glsl_atomic.cpp | |||
| @@ -183,7 +183,7 @@ void EmitStorageAtomicIAdd64(EmitContext& ctx, IR::Inst& inst, const IR::Value& | |||
| 183 | void EmitStorageAtomicSMin64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, | 183 | void EmitStorageAtomicSMin64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, |
| 184 | const IR::Value& offset, std::string_view value) { | 184 | const IR::Value& offset, std::string_view value) { |
| 185 | // LOG_WARNING(..., "Op falling to non-atomic"); | 185 | // LOG_WARNING(..., "Op falling to non-atomic"); |
| 186 | ctx.AddS64("{}=packInt2x32(ivec2({}_ssbo{}[{}>>2],{}_ssbo{}[({}>>2)+1]));", inst, | 186 | ctx.AddU64("{}=packInt2x32(ivec2({}_ssbo{}[{}>>2],{}_ssbo{}[({}>>2)+1]));", inst, |
| 187 | ctx.stage_name, binding.U32(), ctx.var_alloc.Consume(offset), ctx.stage_name, | 187 | ctx.stage_name, binding.U32(), ctx.var_alloc.Consume(offset), ctx.stage_name, |
| 188 | binding.U32(), ctx.var_alloc.Consume(offset)); | 188 | binding.U32(), ctx.var_alloc.Consume(offset)); |
| 189 | ctx.Add("for(int i=0;i<2;++i){{ " | 189 | ctx.Add("for(int i=0;i<2;++i){{ " |
| @@ -208,7 +208,7 @@ void EmitStorageAtomicUMin64(EmitContext& ctx, IR::Inst& inst, const IR::Value& | |||
| 208 | void EmitStorageAtomicSMax64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, | 208 | void EmitStorageAtomicSMax64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, |
| 209 | const IR::Value& offset, std::string_view value) { | 209 | const IR::Value& offset, std::string_view value) { |
| 210 | // LOG_WARNING(..., "Op falling to non-atomic"); | 210 | // LOG_WARNING(..., "Op falling to non-atomic"); |
| 211 | ctx.AddS64("{}=packInt2x32(ivec2({}_ssbo{}[{}>>2],{}_ssbo{}[({}>>2)+1]));", inst, | 211 | ctx.AddU64("{}=packInt2x32(ivec2({}_ssbo{}[{}>>2],{}_ssbo{}[({}>>2)+1]));", inst, |
| 212 | ctx.stage_name, binding.U32(), ctx.var_alloc.Consume(offset), ctx.stage_name, | 212 | ctx.stage_name, binding.U32(), ctx.var_alloc.Consume(offset), ctx.stage_name, |
| 213 | binding.U32(), ctx.var_alloc.Consume(offset)); | 213 | binding.U32(), ctx.var_alloc.Consume(offset)); |
| 214 | ctx.Add("for(int i=0;i<2;++i){{ " | 214 | ctx.Add("for(int i=0;i<2;++i){{ " |
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_convert.cpp b/src/shader_recompiler/backend/glsl/emit_glsl_convert.cpp index 777e290b4..c9f173e2f 100644 --- a/src/shader_recompiler/backend/glsl/emit_glsl_convert.cpp +++ b/src/shader_recompiler/backend/glsl/emit_glsl_convert.cpp | |||
| @@ -15,7 +15,7 @@ void EmitConvertS16F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::I | |||
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | void EmitConvertS16F32(EmitContext& ctx, IR::Inst& inst, std::string_view value) { | 17 | void EmitConvertS16F32(EmitContext& ctx, IR::Inst& inst, std::string_view value) { |
| 18 | ctx.AddS32("{}=(int({})&0xffff)|(bitfieldExtract(int({}),31,1)<<15);", inst, value, value); | 18 | ctx.AddU32("{}=(int({})&0xffff)|(bitfieldExtract(int({}),31,1)<<15);", inst, value, value); |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | void EmitConvertS16F64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | 21 | void EmitConvertS16F64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, |
| @@ -29,11 +29,11 @@ void EmitConvertS32F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::I | |||
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | void EmitConvertS32F32(EmitContext& ctx, IR::Inst& inst, std::string_view value) { | 31 | void EmitConvertS32F32(EmitContext& ctx, IR::Inst& inst, std::string_view value) { |
| 32 | ctx.AddS32("{}=int({});", inst, value); | 32 | ctx.AddU32("{}=int({});", inst, value); |
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | void EmitConvertS32F64(EmitContext& ctx, IR::Inst& inst, std::string_view value) { | 35 | void EmitConvertS32F64(EmitContext& ctx, IR::Inst& inst, std::string_view value) { |
| 36 | ctx.AddS32("{}=int({});", inst, value); | 36 | ctx.AddU32("{}=int({});", inst, value); |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | void EmitConvertS64F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | 39 | void EmitConvertS64F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, |
| @@ -42,11 +42,11 @@ void EmitConvertS64F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::I | |||
| 42 | } | 42 | } |
| 43 | 43 | ||
| 44 | void EmitConvertS64F32(EmitContext& ctx, IR::Inst& inst, std::string_view value) { | 44 | void EmitConvertS64F32(EmitContext& ctx, IR::Inst& inst, std::string_view value) { |
| 45 | ctx.AddS64("{}=int64_t(double({}));", inst, value); | 45 | ctx.AddU64("{}=int64_t(double({}));", inst, value); |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | void EmitConvertS64F64(EmitContext& ctx, IR::Inst& inst, std::string_view value) { | 48 | void EmitConvertS64F64(EmitContext& ctx, IR::Inst& inst, std::string_view value) { |
| 49 | ctx.AddS64("{}=int64_t({});", inst, value); | 49 | ctx.AddU64("{}=int64_t({});", inst, value); |
| 50 | } | 50 | } |
| 51 | 51 | ||
| 52 | void EmitConvertU16F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | 52 | void EmitConvertU16F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, |
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp b/src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp index 6e04c6cb2..7a2f79d10 100644 --- a/src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp +++ b/src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp | |||
| @@ -103,7 +103,7 @@ void EmitShiftRightLogical64(EmitContext& ctx, IR::Inst& inst, std::string_view | |||
| 103 | 103 | ||
| 104 | void EmitShiftRightArithmetic32(EmitContext& ctx, IR::Inst& inst, std::string_view base, | 104 | void EmitShiftRightArithmetic32(EmitContext& ctx, IR::Inst& inst, std::string_view base, |
| 105 | std::string_view shift) { | 105 | std::string_view shift) { |
| 106 | ctx.AddS32("{}=int({})>>{};", inst, base, shift); | 106 | ctx.AddU32("{}=int({})>>{};", inst, base, shift); |
| 107 | } | 107 | } |
| 108 | 108 | ||
| 109 | void EmitShiftRightArithmetic64(EmitContext& ctx, IR::Inst& inst, std::string_view base, | 109 | void EmitShiftRightArithmetic64(EmitContext& ctx, IR::Inst& inst, std::string_view base, |
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_memory.cpp b/src/shader_recompiler/backend/glsl/emit_glsl_memory.cpp index af3dadf71..daef5fb84 100644 --- a/src/shader_recompiler/backend/glsl/emit_glsl_memory.cpp +++ b/src/shader_recompiler/backend/glsl/emit_glsl_memory.cpp | |||
| @@ -87,7 +87,7 @@ void EmitLoadStorageU8(EmitContext& ctx, IR::Inst& inst, const IR::Value& bindin | |||
| 87 | void EmitLoadStorageS8(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, | 87 | void EmitLoadStorageS8(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, |
| 88 | const IR::Value& offset) { | 88 | const IR::Value& offset) { |
| 89 | const auto offset_var{ctx.var_alloc.Consume(offset)}; | 89 | const auto offset_var{ctx.var_alloc.Consume(offset)}; |
| 90 | ctx.AddS32("{}=bitfieldExtract(int({}_ssbo{}[{}>>2]),int({}%4)*8,8);", inst, ctx.stage_name, | 90 | ctx.AddU32("{}=bitfieldExtract(int({}_ssbo{}[{}>>2]),int({}%4)*8,8);", inst, ctx.stage_name, |
| 91 | binding.U32(), offset_var, offset_var); | 91 | binding.U32(), offset_var, offset_var); |
| 92 | } | 92 | } |
| 93 | 93 | ||
| @@ -101,7 +101,7 @@ void EmitLoadStorageU16(EmitContext& ctx, IR::Inst& inst, const IR::Value& bindi | |||
| 101 | void EmitLoadStorageS16(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, | 101 | void EmitLoadStorageS16(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, |
| 102 | const IR::Value& offset) { | 102 | const IR::Value& offset) { |
| 103 | const auto offset_var{ctx.var_alloc.Consume(offset)}; | 103 | const auto offset_var{ctx.var_alloc.Consume(offset)}; |
| 104 | ctx.AddS32("{}=bitfieldExtract(int({}_ssbo{}[{}>>2]),int(({}>>1)%2)*16,16);", inst, | 104 | ctx.AddU32("{}=bitfieldExtract(int({}_ssbo{}[{}>>2]),int(({}>>1)%2)*16,16);", inst, |
| 105 | ctx.stage_name, binding.U32(), offset_var, offset_var); | 105 | ctx.stage_name, binding.U32(), offset_var, offset_var); |
| 106 | } | 106 | } |
| 107 | 107 | ||
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_shared_memory.cpp b/src/shader_recompiler/backend/glsl/emit_glsl_shared_memory.cpp index 5b6175903..7abc6575f 100644 --- a/src/shader_recompiler/backend/glsl/emit_glsl_shared_memory.cpp +++ b/src/shader_recompiler/backend/glsl/emit_glsl_shared_memory.cpp | |||
| @@ -14,7 +14,7 @@ void EmitLoadSharedU8(EmitContext& ctx, IR::Inst& inst, std::string_view offset) | |||
| 14 | } | 14 | } |
| 15 | 15 | ||
| 16 | void EmitLoadSharedS8(EmitContext& ctx, IR::Inst& inst, std::string_view offset) { | 16 | void EmitLoadSharedS8(EmitContext& ctx, IR::Inst& inst, std::string_view offset) { |
| 17 | ctx.AddS32("{}=bitfieldExtract(int(smem[{}>>2]),int({}%4)*8,8);", inst, offset, offset); | 17 | ctx.AddU32("{}=bitfieldExtract(int(smem[{}>>2]),int({}%4)*8,8);", inst, offset, offset); |
| 18 | } | 18 | } |
| 19 | 19 | ||
| 20 | void EmitLoadSharedU16(EmitContext& ctx, IR::Inst& inst, std::string_view offset) { | 20 | void EmitLoadSharedU16(EmitContext& ctx, IR::Inst& inst, std::string_view offset) { |
| @@ -22,7 +22,7 @@ void EmitLoadSharedU16(EmitContext& ctx, IR::Inst& inst, std::string_view offset | |||
| 22 | } | 22 | } |
| 23 | 23 | ||
| 24 | void EmitLoadSharedS16(EmitContext& ctx, IR::Inst& inst, std::string_view offset) { | 24 | void EmitLoadSharedS16(EmitContext& ctx, IR::Inst& inst, std::string_view offset) { |
| 25 | ctx.AddS32("{}=bitfieldExtract(int(smem[{}>>2]),int(({}>>1)%2)*16,16);", inst, offset, offset); | 25 | ctx.AddU32("{}=bitfieldExtract(int(smem[{}>>2]),int(({}>>1)%2)*16,16);", inst, offset, offset); |
| 26 | } | 26 | } |
| 27 | 27 | ||
| 28 | void EmitLoadSharedU32(EmitContext& ctx, IR::Inst& inst, std::string_view offset) { | 28 | void EmitLoadSharedU32(EmitContext& ctx, IR::Inst& inst, std::string_view offset) { |
diff --git a/src/shader_recompiler/backend/glsl/var_alloc.cpp b/src/shader_recompiler/backend/glsl/var_alloc.cpp index 6a19aa549..cbf56491c 100644 --- a/src/shader_recompiler/backend/glsl/var_alloc.cpp +++ b/src/shader_recompiler/backend/glsl/var_alloc.cpp | |||
| @@ -21,12 +21,8 @@ std::string TypePrefix(GlslVarType type) { | |||
| 21 | return "f16x2_"; | 21 | return "f16x2_"; |
| 22 | case GlslVarType::U32: | 22 | case GlslVarType::U32: |
| 23 | return "u_"; | 23 | return "u_"; |
| 24 | case GlslVarType::S32: | ||
| 25 | return "s_"; | ||
| 26 | case GlslVarType::F32: | 24 | case GlslVarType::F32: |
| 27 | return "f_"; | 25 | return "f_"; |
| 28 | case GlslVarType::S64: | ||
| 29 | return "s64_"; | ||
| 30 | case GlslVarType::U64: | 26 | case GlslVarType::U64: |
| 31 | return "u64_"; | 27 | return "u64_"; |
| 32 | case GlslVarType::F64: | 28 | case GlslVarType::F64: |
| @@ -213,13 +209,9 @@ std::string VarAlloc::GetGlslType(GlslVarType type) const { | |||
| 213 | return "f16vec2"; | 209 | return "f16vec2"; |
| 214 | case GlslVarType::U32: | 210 | case GlslVarType::U32: |
| 215 | return "uint"; | 211 | return "uint"; |
| 216 | case GlslVarType::S32: | ||
| 217 | return "int"; | ||
| 218 | case GlslVarType::F32: | 212 | case GlslVarType::F32: |
| 219 | case GlslVarType::PrecF32: | 213 | case GlslVarType::PrecF32: |
| 220 | return "float"; | 214 | return "float"; |
| 221 | case GlslVarType::S64: | ||
| 222 | return "int64_t"; | ||
| 223 | case GlslVarType::U64: | 215 | case GlslVarType::U64: |
| 224 | return "uint64_t"; | 216 | return "uint64_t"; |
| 225 | case GlslVarType::F64: | 217 | case GlslVarType::F64: |
| @@ -252,12 +244,8 @@ VarAlloc::UseTracker& VarAlloc::GetUseTracker(GlslVarType type) { | |||
| 252 | return var_f16x2; | 244 | return var_f16x2; |
| 253 | case GlslVarType::U32: | 245 | case GlslVarType::U32: |
| 254 | return var_u32; | 246 | return var_u32; |
| 255 | case GlslVarType::S32: | ||
| 256 | return var_s32; | ||
| 257 | case GlslVarType::F32: | 247 | case GlslVarType::F32: |
| 258 | return var_f32; | 248 | return var_f32; |
| 259 | case GlslVarType::S64: | ||
| 260 | return var_s64; | ||
| 261 | case GlslVarType::U64: | 249 | case GlslVarType::U64: |
| 262 | return var_u64; | 250 | return var_u64; |
| 263 | case GlslVarType::F64: | 251 | case GlslVarType::F64: |
| @@ -291,12 +279,8 @@ const VarAlloc::UseTracker& VarAlloc::GetUseTracker(GlslVarType type) const { | |||
| 291 | return var_f16x2; | 279 | return var_f16x2; |
| 292 | case GlslVarType::U32: | 280 | case GlslVarType::U32: |
| 293 | return var_u32; | 281 | return var_u32; |
| 294 | case GlslVarType::S32: | ||
| 295 | return var_s32; | ||
| 296 | case GlslVarType::F32: | 282 | case GlslVarType::F32: |
| 297 | return var_f32; | 283 | return var_f32; |
| 298 | case GlslVarType::S64: | ||
| 299 | return var_s64; | ||
| 300 | case GlslVarType::U64: | 284 | case GlslVarType::U64: |
| 301 | return var_u64; | 285 | return var_u64; |
| 302 | case GlslVarType::F64: | 286 | case GlslVarType::F64: |
diff --git a/src/shader_recompiler/backend/glsl/var_alloc.h b/src/shader_recompiler/backend/glsl/var_alloc.h index ab1d1acbd..8b49f32a6 100644 --- a/src/shader_recompiler/backend/glsl/var_alloc.h +++ b/src/shader_recompiler/backend/glsl/var_alloc.h | |||
| @@ -21,10 +21,8 @@ namespace Shader::Backend::GLSL { | |||
| 21 | enum class GlslVarType : u32 { | 21 | enum class GlslVarType : u32 { |
| 22 | U1, | 22 | U1, |
| 23 | F16x2, | 23 | F16x2, |
| 24 | S32, | ||
| 25 | U32, | 24 | U32, |
| 26 | F32, | 25 | F32, |
| 27 | S64, | ||
| 28 | U64, | 26 | U64, |
| 29 | F64, | 27 | F64, |
| 30 | U32x2, | 28 | U32x2, |
| @@ -42,7 +40,7 @@ struct Id { | |||
| 42 | union { | 40 | union { |
| 43 | u32 raw; | 41 | u32 raw; |
| 44 | BitField<0, 1, u32> is_valid; | 42 | BitField<0, 1, u32> is_valid; |
| 45 | BitField<1, 5, GlslVarType> type; | 43 | BitField<1, 4, GlslVarType> type; |
| 46 | BitField<6, 26, u32> index; | 44 | BitField<6, 26, u32> index; |
| 47 | }; | 45 | }; |
| 48 | 46 | ||
| @@ -90,7 +88,6 @@ private: | |||
| 90 | 88 | ||
| 91 | UseTracker var_bool{}; | 89 | UseTracker var_bool{}; |
| 92 | UseTracker var_f16x2{}; | 90 | UseTracker var_f16x2{}; |
| 93 | UseTracker var_s32{}; | ||
| 94 | UseTracker var_u32{}; | 91 | UseTracker var_u32{}; |
| 95 | UseTracker var_u32x2{}; | 92 | UseTracker var_u32x2{}; |
| 96 | UseTracker var_u32x3{}; | 93 | UseTracker var_u32x3{}; |
| @@ -100,7 +97,6 @@ private: | |||
| 100 | UseTracker var_f32x3{}; | 97 | UseTracker var_f32x3{}; |
| 101 | UseTracker var_f32x4{}; | 98 | UseTracker var_f32x4{}; |
| 102 | UseTracker var_u64{}; | 99 | UseTracker var_u64{}; |
| 103 | UseTracker var_s64{}; | ||
| 104 | UseTracker var_f64{}; | 100 | UseTracker var_f64{}; |
| 105 | UseTracker var_precf32{}; | 101 | UseTracker var_precf32{}; |
| 106 | UseTracker var_precf64{}; | 102 | UseTracker var_precf64{}; |