summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv_image.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp
index 64a4e0e55..945cdb42b 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp
@@ -321,17 +321,23 @@ void AddOffsetToCoordinates(EmitContext& ctx, const IR::TextureInstInfo& info, I
Id result_type{};
switch (info.type) {
case TextureType::Buffer:
- case TextureType::Color1D:
- case TextureType::ColorArray1D: {
+ case TextureType::Color1D: {
result_type = ctx.U32[1];
break;
}
+ case TextureType::ColorArray1D:
+ offset = ctx.OpCompositeConstruct(ctx.U32[2], offset, ctx.u32_zero_value);
+ [[fallthrough]];
case TextureType::Color2D:
- case TextureType::Color2DRect:
- case TextureType::ColorArray2D: {
+ case TextureType::Color2DRect: {
result_type = ctx.U32[2];
break;
}
+ case TextureType::ColorArray2D:
+ offset = ctx.OpCompositeConstruct(ctx.U32[3], ctx.OpCompositeExtract(ctx.U32[1], coords, 0),
+ ctx.OpCompositeExtract(ctx.U32[1], coords, 1),
+ ctx.u32_zero_value);
+ [[fallthrough]];
case TextureType::Color3D: {
result_type = ctx.U32[3];
break;