summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/backend/glsl
diff options
context:
space:
mode:
authorGravatar ameerj2021-06-11 00:41:28 -0400
committerGravatar ameerj2021-07-22 21:51:38 -0400
commit7d89a82a4891f78e2c068a24ad3bb56d74c92055 (patch)
treedb21e0994cfd729d7deeaf47eb300d1109539861 /src/shader_recompiler/backend/glsl
parentglsl: Address Rodrigo's feedback (diff)
downloadyuzu-7d89a82a4891f78e2c068a24ad3bb56d74c92055.tar.gz
yuzu-7d89a82a4891f78e2c068a24ad3bb56d74c92055.tar.xz
yuzu-7d89a82a4891f78e2c068a24ad3bb56d74c92055.zip
glsl: Remove Signed Integer variables
Diffstat (limited to 'src/shader_recompiler/backend/glsl')
-rw-r--r--src/shader_recompiler/backend/glsl/emit_context.h10
-rw-r--r--src/shader_recompiler/backend/glsl/emit_glsl_atomic.cpp4
-rw-r--r--src/shader_recompiler/backend/glsl/emit_glsl_convert.cpp10
-rw-r--r--src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp2
-rw-r--r--src/shader_recompiler/backend/glsl/emit_glsl_memory.cpp4
-rw-r--r--src/shader_recompiler/backend/glsl/emit_glsl_shared_memory.cpp4
-rw-r--r--src/shader_recompiler/backend/glsl/var_alloc.cpp16
-rw-r--r--src/shader_recompiler/backend/glsl/var_alloc.h6
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&
183void EmitStorageAtomicSMin64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, 183void 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&
208void EmitStorageAtomicSMax64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, 208void 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
17void EmitConvertS16F32(EmitContext& ctx, IR::Inst& inst, std::string_view value) { 17void 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
21void EmitConvertS16F64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, 21void 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
31void EmitConvertS32F32(EmitContext& ctx, IR::Inst& inst, std::string_view value) { 31void 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
35void EmitConvertS32F64(EmitContext& ctx, IR::Inst& inst, std::string_view value) { 35void 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
39void EmitConvertS64F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, 39void 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
44void EmitConvertS64F32(EmitContext& ctx, IR::Inst& inst, std::string_view value) { 44void 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
48void EmitConvertS64F64(EmitContext& ctx, IR::Inst& inst, std::string_view value) { 48void 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
52void EmitConvertU16F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, 52void 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
104void EmitShiftRightArithmetic32(EmitContext& ctx, IR::Inst& inst, std::string_view base, 104void 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
109void EmitShiftRightArithmetic64(EmitContext& ctx, IR::Inst& inst, std::string_view base, 109void 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
87void EmitLoadStorageS8(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, 87void 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
101void EmitLoadStorageS16(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, 101void 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
16void EmitLoadSharedS8(EmitContext& ctx, IR::Inst& inst, std::string_view offset) { 16void 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
20void EmitLoadSharedU16(EmitContext& ctx, IR::Inst& inst, std::string_view offset) { 20void 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
24void EmitLoadSharedS16(EmitContext& ctx, IR::Inst& inst, std::string_view offset) { 24void 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
28void EmitLoadSharedU32(EmitContext& ctx, IR::Inst& inst, std::string_view offset) { 28void 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 {
21enum class GlslVarType : u32 { 21enum 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{};