summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/backend
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-02-14 20:15:42 -0300
committerGravatar ameerj2021-07-22 21:51:22 -0400
commitcbfb7d182a4e90e4e263696d1fca35e47d3eabb4 (patch)
treea8d384aa0daefdfafd9b61330e06b1cf7ac40ea6 /src/shader_recompiler/backend
parentshader: Misc fixes (diff)
downloadyuzu-cbfb7d182a4e90e4e263696d1fca35e47d3eabb4.tar.gz
yuzu-cbfb7d182a4e90e4e263696d1fca35e47d3eabb4.tar.xz
yuzu-cbfb7d182a4e90e4e263696d1fca35e47d3eabb4.zip
shader: Support SSA loops on IR
Diffstat (limited to 'src/shader_recompiler/backend')
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv.h12
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv_integer.cpp8
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv_undefined.cpp10
3 files changed, 15 insertions, 15 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv.h b/src/shader_recompiler/backend/spirv/emit_spirv.h
index 46ec7a1bb..6b09757d1 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv.h
+++ b/src/shader_recompiler/backend/spirv/emit_spirv.h
@@ -159,10 +159,10 @@ private:
159 Id EmitWorkgroupId(EmitContext& ctx); 159 Id EmitWorkgroupId(EmitContext& ctx);
160 Id EmitLocalInvocationId(EmitContext& ctx); 160 Id EmitLocalInvocationId(EmitContext& ctx);
161 Id EmitUndefU1(EmitContext& ctx); 161 Id EmitUndefU1(EmitContext& ctx);
162 void EmitUndefU8(EmitContext& ctx); 162 Id EmitUndefU8(EmitContext& ctx);
163 void EmitUndefU16(EmitContext& ctx); 163 Id EmitUndefU16(EmitContext& ctx);
164 void EmitUndefU32(EmitContext& ctx); 164 Id EmitUndefU32(EmitContext& ctx);
165 void EmitUndefU64(EmitContext& ctx); 165 Id EmitUndefU64(EmitContext& ctx);
166 void EmitLoadGlobalU8(EmitContext& ctx); 166 void EmitLoadGlobalU8(EmitContext& ctx);
167 void EmitLoadGlobalS8(EmitContext& ctx); 167 void EmitLoadGlobalS8(EmitContext& ctx);
168 void EmitLoadGlobalU16(EmitContext& ctx); 168 void EmitLoadGlobalU16(EmitContext& ctx);
@@ -297,12 +297,12 @@ private:
297 void EmitBitFieldInsert(EmitContext& ctx); 297 void EmitBitFieldInsert(EmitContext& ctx);
298 void EmitBitFieldSExtract(EmitContext& ctx); 298 void EmitBitFieldSExtract(EmitContext& ctx);
299 Id EmitBitFieldUExtract(EmitContext& ctx, Id base, Id offset, Id count); 299 Id EmitBitFieldUExtract(EmitContext& ctx, Id base, Id offset, Id count);
300 void EmitSLessThan(EmitContext& ctx); 300 Id EmitSLessThan(EmitContext& ctx, Id lhs, Id rhs);
301 void EmitULessThan(EmitContext& ctx); 301 void EmitULessThan(EmitContext& ctx);
302 void EmitIEqual(EmitContext& ctx); 302 void EmitIEqual(EmitContext& ctx);
303 void EmitSLessThanEqual(EmitContext& ctx); 303 void EmitSLessThanEqual(EmitContext& ctx);
304 void EmitULessThanEqual(EmitContext& ctx); 304 void EmitULessThanEqual(EmitContext& ctx);
305 void EmitSGreaterThan(EmitContext& ctx); 305 Id EmitSGreaterThan(EmitContext& ctx, Id lhs, Id rhs);
306 void EmitUGreaterThan(EmitContext& ctx); 306 void EmitUGreaterThan(EmitContext& ctx);
307 void EmitINotEqual(EmitContext& ctx); 307 void EmitINotEqual(EmitContext& ctx);
308 void EmitSGreaterThanEqual(EmitContext& ctx); 308 void EmitSGreaterThanEqual(EmitContext& ctx);
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_integer.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_integer.cpp
index 3ef4f3d78..e811a63ab 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_integer.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_integer.cpp
@@ -73,8 +73,8 @@ Id EmitSPIRV::EmitBitFieldUExtract(EmitContext& ctx, Id base, Id offset, Id coun
73 return ctx.OpBitFieldUExtract(ctx.u32[1], base, offset, count); 73 return ctx.OpBitFieldUExtract(ctx.u32[1], base, offset, count);
74} 74}
75 75
76void EmitSPIRV::EmitSLessThan(EmitContext&) { 76Id EmitSPIRV::EmitSLessThan(EmitContext& ctx, Id lhs, Id rhs) {
77 throw NotImplementedException("SPIR-V Instruction"); 77 return ctx.OpSLessThan(ctx.u1, lhs, rhs);
78} 78}
79 79
80void EmitSPIRV::EmitULessThan(EmitContext&) { 80void EmitSPIRV::EmitULessThan(EmitContext&) {
@@ -93,8 +93,8 @@ void EmitSPIRV::EmitULessThanEqual(EmitContext&) {
93 throw NotImplementedException("SPIR-V Instruction"); 93 throw NotImplementedException("SPIR-V Instruction");
94} 94}
95 95
96void EmitSPIRV::EmitSGreaterThan(EmitContext&) { 96Id EmitSPIRV::EmitSGreaterThan(EmitContext& ctx, Id lhs, Id rhs) {
97 throw NotImplementedException("SPIR-V Instruction"); 97 return ctx.OpSGreaterThan(ctx.u1, lhs, rhs);
98} 98}
99 99
100void EmitSPIRV::EmitUGreaterThan(EmitContext&) { 100void EmitSPIRV::EmitUGreaterThan(EmitContext&) {
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_undefined.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_undefined.cpp
index 859b60a95..a6f542360 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_undefined.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_undefined.cpp
@@ -10,19 +10,19 @@ Id EmitSPIRV::EmitUndefU1(EmitContext& ctx) {
10 return ctx.OpUndef(ctx.u1); 10 return ctx.OpUndef(ctx.u1);
11} 11}
12 12
13void EmitSPIRV::EmitUndefU8(EmitContext&) { 13Id EmitSPIRV::EmitUndefU8(EmitContext&) {
14 throw NotImplementedException("SPIR-V Instruction"); 14 throw NotImplementedException("SPIR-V Instruction");
15} 15}
16 16
17void EmitSPIRV::EmitUndefU16(EmitContext&) { 17Id EmitSPIRV::EmitUndefU16(EmitContext&) {
18 throw NotImplementedException("SPIR-V Instruction"); 18 throw NotImplementedException("SPIR-V Instruction");
19} 19}
20 20
21void EmitSPIRV::EmitUndefU32(EmitContext&) { 21Id EmitSPIRV::EmitUndefU32(EmitContext& ctx) {
22 throw NotImplementedException("SPIR-V Instruction"); 22 return ctx.OpUndef(ctx.u32[1]);
23} 23}
24 24
25void EmitSPIRV::EmitUndefU64(EmitContext&) { 25Id EmitSPIRV::EmitUndefU64(EmitContext&) {
26 throw NotImplementedException("SPIR-V Instruction"); 26 throw NotImplementedException("SPIR-V Instruction");
27} 27}
28 28