summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/backend
diff options
context:
space:
mode:
Diffstat (limited to 'src/shader_recompiler/backend')
-rw-r--r--src/shader_recompiler/backend/spirv/emit_context.cpp2
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv.h13
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv_convert.cpp48
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv_integer.cpp4
4 files changed, 67 insertions, 0 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_context.cpp b/src/shader_recompiler/backend/spirv/emit_context.cpp
index 6c79b611b..6c8f16562 100644
--- a/src/shader_recompiler/backend/spirv/emit_context.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_context.cpp
@@ -89,6 +89,8 @@ Id EmitContext::Def(const IR::Value& value) {
89 return value.U1() ? true_value : false_value; 89 return value.U1() ? true_value : false_value;
90 case IR::Type::U32: 90 case IR::Type::U32:
91 return Constant(U32[1], value.U32()); 91 return Constant(U32[1], value.U32());
92 case IR::Type::U64:
93 return Constant(U64, value.U64());
92 case IR::Type::F32: 94 case IR::Type::F32:
93 return Constant(F32[1], value.F32()); 95 return Constant(F32[1], value.F32());
94 case IR::Type::F64: 96 case IR::Type::F64:
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv.h b/src/shader_recompiler/backend/spirv/emit_spirv.h
index ae121f534..1fe65f8a9 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv.h
+++ b/src/shader_recompiler/backend/spirv/emit_spirv.h
@@ -243,6 +243,7 @@ Id EmitIMul32(EmitContext& ctx, Id a, Id b);
243Id EmitINeg32(EmitContext& ctx, Id value); 243Id EmitINeg32(EmitContext& ctx, Id value);
244Id EmitINeg64(EmitContext& ctx, Id value); 244Id EmitINeg64(EmitContext& ctx, Id value);
245Id EmitIAbs32(EmitContext& ctx, Id value); 245Id EmitIAbs32(EmitContext& ctx, Id value);
246Id EmitIAbs64(EmitContext& ctx, Id value);
246Id EmitShiftLeftLogical32(EmitContext& ctx, Id base, Id shift); 247Id EmitShiftLeftLogical32(EmitContext& ctx, Id base, Id shift);
247Id EmitShiftLeftLogical64(EmitContext& ctx, Id base, Id shift); 248Id EmitShiftLeftLogical64(EmitContext& ctx, Id base, Id shift);
248Id EmitShiftRightLogical32(EmitContext& ctx, Id base, Id shift); 249Id EmitShiftRightLogical32(EmitContext& ctx, Id base, Id shift);
@@ -302,16 +303,28 @@ Id EmitConvertF16F32(EmitContext& ctx, Id value);
302Id EmitConvertF32F16(EmitContext& ctx, Id value); 303Id EmitConvertF32F16(EmitContext& ctx, Id value);
303Id EmitConvertF32F64(EmitContext& ctx, Id value); 304Id EmitConvertF32F64(EmitContext& ctx, Id value);
304Id EmitConvertF64F32(EmitContext& ctx, Id value); 305Id EmitConvertF64F32(EmitContext& ctx, Id value);
306Id EmitConvertF16S8(EmitContext& ctx, Id value);
307Id EmitConvertF16S16(EmitContext& ctx, Id value);
305Id EmitConvertF16S32(EmitContext& ctx, Id value); 308Id EmitConvertF16S32(EmitContext& ctx, Id value);
306Id EmitConvertF16S64(EmitContext& ctx, Id value); 309Id EmitConvertF16S64(EmitContext& ctx, Id value);
310Id EmitConvertF16U8(EmitContext& ctx, Id value);
311Id EmitConvertF16U16(EmitContext& ctx, Id value);
307Id EmitConvertF16U32(EmitContext& ctx, Id value); 312Id EmitConvertF16U32(EmitContext& ctx, Id value);
308Id EmitConvertF16U64(EmitContext& ctx, Id value); 313Id EmitConvertF16U64(EmitContext& ctx, Id value);
314Id EmitConvertF32S8(EmitContext& ctx, Id value);
315Id EmitConvertF32S16(EmitContext& ctx, Id value);
309Id EmitConvertF32S32(EmitContext& ctx, Id value); 316Id EmitConvertF32S32(EmitContext& ctx, Id value);
310Id EmitConvertF32S64(EmitContext& ctx, Id value); 317Id EmitConvertF32S64(EmitContext& ctx, Id value);
318Id EmitConvertF32U8(EmitContext& ctx, Id value);
319Id EmitConvertF32U16(EmitContext& ctx, Id value);
311Id EmitConvertF32U32(EmitContext& ctx, Id value); 320Id EmitConvertF32U32(EmitContext& ctx, Id value);
312Id EmitConvertF32U64(EmitContext& ctx, Id value); 321Id EmitConvertF32U64(EmitContext& ctx, Id value);
322Id EmitConvertF64S8(EmitContext& ctx, Id value);
323Id EmitConvertF64S16(EmitContext& ctx, Id value);
313Id EmitConvertF64S32(EmitContext& ctx, Id value); 324Id EmitConvertF64S32(EmitContext& ctx, Id value);
314Id EmitConvertF64S64(EmitContext& ctx, Id value); 325Id EmitConvertF64S64(EmitContext& ctx, Id value);
326Id EmitConvertF64U8(EmitContext& ctx, Id value);
327Id EmitConvertF64U16(EmitContext& ctx, Id value);
315Id EmitConvertF64U32(EmitContext& ctx, Id value); 328Id EmitConvertF64U32(EmitContext& ctx, Id value);
316Id EmitConvertF64U64(EmitContext& ctx, Id value); 329Id EmitConvertF64U64(EmitContext& ctx, Id value);
317Id EmitBindlessImageSampleImplicitLod(EmitContext&); 330Id EmitBindlessImageSampleImplicitLod(EmitContext&);
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_convert.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_convert.cpp
index 2aff673aa..757165626 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_convert.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_convert.cpp
@@ -102,6 +102,14 @@ Id EmitConvertF64F32(EmitContext& ctx, Id value) {
102 return ctx.OpFConvert(ctx.F64[1], value); 102 return ctx.OpFConvert(ctx.F64[1], value);
103} 103}
104 104
105Id EmitConvertF16S8(EmitContext& ctx, Id value) {
106 return ctx.OpConvertSToF(ctx.F16[1], value);
107}
108
109Id EmitConvertF16S16(EmitContext& ctx, Id value) {
110 return ctx.OpConvertSToF(ctx.F16[1], value);
111}
112
105Id EmitConvertF16S32(EmitContext& ctx, Id value) { 113Id EmitConvertF16S32(EmitContext& ctx, Id value) {
106 return ctx.OpConvertSToF(ctx.F16[1], value); 114 return ctx.OpConvertSToF(ctx.F16[1], value);
107} 115}
@@ -110,6 +118,14 @@ Id EmitConvertF16S64(EmitContext& ctx, Id value) {
110 return ctx.OpConvertSToF(ctx.F16[1], value); 118 return ctx.OpConvertSToF(ctx.F16[1], value);
111} 119}
112 120
121Id EmitConvertF16U8(EmitContext& ctx, Id value) {
122 return ctx.OpConvertUToF(ctx.F16[1], value);
123}
124
125Id EmitConvertF16U16(EmitContext& ctx, Id value) {
126 return ctx.OpConvertUToF(ctx.F16[1], value);
127}
128
113Id EmitConvertF16U32(EmitContext& ctx, Id value) { 129Id EmitConvertF16U32(EmitContext& ctx, Id value) {
114 return ctx.OpConvertUToF(ctx.F16[1], value); 130 return ctx.OpConvertUToF(ctx.F16[1], value);
115} 131}
@@ -118,6 +134,14 @@ Id EmitConvertF16U64(EmitContext& ctx, Id value) {
118 return ctx.OpConvertUToF(ctx.F16[1], value); 134 return ctx.OpConvertUToF(ctx.F16[1], value);
119} 135}
120 136
137Id EmitConvertF32S8(EmitContext& ctx, Id value) {
138 return ctx.OpConvertSToF(ctx.F32[1], ctx.OpUConvert(ctx.U8, value));
139}
140
141Id EmitConvertF32S16(EmitContext& ctx, Id value) {
142 return ctx.OpConvertSToF(ctx.F32[1], ctx.OpUConvert(ctx.U16, value));
143}
144
121Id EmitConvertF32S32(EmitContext& ctx, Id value) { 145Id EmitConvertF32S32(EmitContext& ctx, Id value) {
122 return ctx.OpConvertSToF(ctx.F32[1], value); 146 return ctx.OpConvertSToF(ctx.F32[1], value);
123} 147}
@@ -126,6 +150,14 @@ Id EmitConvertF32S64(EmitContext& ctx, Id value) {
126 return ctx.OpConvertSToF(ctx.F32[1], value); 150 return ctx.OpConvertSToF(ctx.F32[1], value);
127} 151}
128 152
153Id EmitConvertF32U8(EmitContext& ctx, Id value) {
154 return ctx.OpConvertUToF(ctx.F32[1], ctx.OpUConvert(ctx.U8, value));
155}
156
157Id EmitConvertF32U16(EmitContext& ctx, Id value) {
158 return ctx.OpConvertUToF(ctx.F32[1], ctx.OpUConvert(ctx.U16, value));
159}
160
129Id EmitConvertF32U32(EmitContext& ctx, Id value) { 161Id EmitConvertF32U32(EmitContext& ctx, Id value) {
130 return ctx.OpConvertUToF(ctx.F32[1], value); 162 return ctx.OpConvertUToF(ctx.F32[1], value);
131} 163}
@@ -134,6 +166,14 @@ Id EmitConvertF32U64(EmitContext& ctx, Id value) {
134 return ctx.OpConvertUToF(ctx.F32[1], value); 166 return ctx.OpConvertUToF(ctx.F32[1], value);
135} 167}
136 168
169Id EmitConvertF64S8(EmitContext& ctx, Id value) {
170 return ctx.OpConvertSToF(ctx.F64[1], ctx.OpUConvert(ctx.U8, value));
171}
172
173Id EmitConvertF64S16(EmitContext& ctx, Id value) {
174 return ctx.OpConvertSToF(ctx.F64[1], ctx.OpUConvert(ctx.U16, value));
175}
176
137Id EmitConvertF64S32(EmitContext& ctx, Id value) { 177Id EmitConvertF64S32(EmitContext& ctx, Id value) {
138 return ctx.OpConvertSToF(ctx.F64[1], value); 178 return ctx.OpConvertSToF(ctx.F64[1], value);
139} 179}
@@ -142,6 +182,14 @@ Id EmitConvertF64S64(EmitContext& ctx, Id value) {
142 return ctx.OpConvertSToF(ctx.F64[1], value); 182 return ctx.OpConvertSToF(ctx.F64[1], value);
143} 183}
144 184
185Id EmitConvertF64U8(EmitContext& ctx, Id value) {
186 return ctx.OpConvertUToF(ctx.F64[1], ctx.OpUConvert(ctx.U8, value));
187}
188
189Id EmitConvertF64U16(EmitContext& ctx, Id value) {
190 return ctx.OpConvertUToF(ctx.F64[1], ctx.OpUConvert(ctx.U16, value));
191}
192
145Id EmitConvertF64U32(EmitContext& ctx, Id value) { 193Id EmitConvertF64U32(EmitContext& ctx, Id value) {
146 return ctx.OpConvertUToF(ctx.F64[1], value); 194 return ctx.OpConvertUToF(ctx.F64[1], value);
147} 195}
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_integer.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_integer.cpp
index c9de204b0..a9c5e9cca 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_integer.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_integer.cpp
@@ -70,6 +70,10 @@ Id EmitIAbs32(EmitContext& ctx, Id value) {
70 return ctx.OpSAbs(ctx.U32[1], value); 70 return ctx.OpSAbs(ctx.U32[1], value);
71} 71}
72 72
73Id EmitIAbs64(EmitContext& ctx, Id value) {
74 return ctx.OpSAbs(ctx.U64, value);
75}
76
73Id EmitShiftLeftLogical32(EmitContext& ctx, Id base, Id shift) { 77Id EmitShiftLeftLogical32(EmitContext& ctx, Id base, Id shift) {
74 return ctx.OpShiftLeftLogical(ctx.U32[1], base, shift); 78 return ctx.OpShiftLeftLogical(ctx.U32[1], base, shift);
75} 79}