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.h25
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv_image.cpp10
2 files changed, 26 insertions, 9 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_context.h b/src/shader_recompiler/backend/spirv/emit_context.h
index baf12c217..823ed8525 100644
--- a/src/shader_recompiler/backend/spirv/emit_context.h
+++ b/src/shader_recompiler/backend/spirv/emit_context.h
@@ -122,10 +122,6 @@ public:
122 return Constant(U32[1], value); 122 return Constant(U32[1], value);
123 } 123 }
124 124
125 Id Const(f32 value) {
126 return Constant(F32[1], value);
127 }
128
129 Id Const(u32 element_1, u32 element_2) { 125 Id Const(u32 element_1, u32 element_2) {
130 return ConstantComposite(U32[2], Const(element_1), Const(element_2)); 126 return ConstantComposite(U32[2], Const(element_1), Const(element_2));
131 } 127 }
@@ -139,6 +135,27 @@ public:
139 Const(element_4)); 135 Const(element_4));
140 } 136 }
141 137
138 Id SConst(s32 value) {
139 return Constant(S32[1], value);
140 }
141
142 Id SConst(s32 element_1, s32 element_2) {
143 return ConstantComposite(S32[2], SConst(element_1), SConst(element_2));
144 }
145
146 Id SConst(s32 element_1, s32 element_2, s32 element_3) {
147 return ConstantComposite(S32[3], SConst(element_1), SConst(element_2), SConst(element_3));
148 }
149
150 Id SConst(s32 element_1, s32 element_2, s32 element_3, s32 element_4) {
151 return ConstantComposite(S32[4], SConst(element_1), SConst(element_2), SConst(element_3),
152 SConst(element_4));
153 }
154
155 Id Const(f32 value) {
156 return Constant(F32[1], value);
157 }
158
142 const Profile& profile; 159 const Profile& profile;
143 Stage stage{}; 160 Stage stage{};
144 161
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp
index 6008980af..a6cb67b97 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp
@@ -104,7 +104,7 @@ private:
104 return; 104 return;
105 } 105 }
106 if (offset.IsImmediate()) { 106 if (offset.IsImmediate()) {
107 Add(spv::ImageOperandsMask::ConstOffset, ctx.Const(offset.U32())); 107 Add(spv::ImageOperandsMask::ConstOffset, ctx.SConst(offset.U32()));
108 return; 108 return;
109 } 109 }
110 IR::Inst* const inst{offset.InstRecursive()}; 110 IR::Inst* const inst{offset.InstRecursive()};
@@ -112,16 +112,16 @@ private:
112 switch (inst->GetOpcode()) { 112 switch (inst->GetOpcode()) {
113 case IR::Opcode::CompositeConstructU32x2: 113 case IR::Opcode::CompositeConstructU32x2:
114 Add(spv::ImageOperandsMask::ConstOffset, 114 Add(spv::ImageOperandsMask::ConstOffset,
115 ctx.Const(inst->Arg(0).U32(), inst->Arg(1).U32())); 115 ctx.SConst(inst->Arg(0).U32(), inst->Arg(1).U32()));
116 return; 116 return;
117 case IR::Opcode::CompositeConstructU32x3: 117 case IR::Opcode::CompositeConstructU32x3:
118 Add(spv::ImageOperandsMask::ConstOffset, 118 Add(spv::ImageOperandsMask::ConstOffset,
119 ctx.Const(inst->Arg(0).U32(), inst->Arg(1).U32(), inst->Arg(2).U32())); 119 ctx.SConst(inst->Arg(0).U32(), inst->Arg(1).U32(), inst->Arg(2).U32()));
120 return; 120 return;
121 case IR::Opcode::CompositeConstructU32x4: 121 case IR::Opcode::CompositeConstructU32x4:
122 Add(spv::ImageOperandsMask::ConstOffset, 122 Add(spv::ImageOperandsMask::ConstOffset,
123 ctx.Const(inst->Arg(0).U32(), inst->Arg(1).U32(), inst->Arg(2).U32(), 123 ctx.SConst(inst->Arg(0).U32(), inst->Arg(1).U32(), inst->Arg(2).U32(),
124 inst->Arg(3).U32())); 124 inst->Arg(3).U32()));
125 return; 125 return;
126 default: 126 default:
127 break; 127 break;