diff options
Diffstat (limited to 'src/shader_recompiler/backend/spirv')
| -rw-r--r-- | src/shader_recompiler/backend/spirv/emit_context.h | 25 | ||||
| -rw-r--r-- | src/shader_recompiler/backend/spirv/emit_spirv_image.cpp | 10 |
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; |