intel: Fix xglCmdImageResolve doesn't properly support MSAA texture arrays
Conflicts:
icd/intel/cmd_meta.c
include/vulkan.h
diff --git a/icd/intel/cmd_meta.c b/icd/intel/cmd_meta.c
index f1b362e..0074406 100644
--- a/icd/intel/cmd_meta.c
+++ b/icd/intel/cmd_meta.c
@@ -1046,23 +1046,26 @@
for (i = 0; i < rectCount; i++) {
const VkImageResolve *rect = &pRects[i];
+ int arraySlice;
- meta.src.lod = rect->srcSubresource.mipLevel;
- meta.src.layer = rect->srcSubresource.arraySlice;
- meta.src.x = rect->srcOffset.x;
- meta.src.y = rect->srcOffset.y;
+ for(arraySlice = 0; arraySlice < rect->extent.depth; arraySlice++) {
+ meta.src.lod = rect->srcSubresource.mipLevel;
+ meta.src.layer = rect->srcSubresource.arraySlice + arraySlice;
+ meta.src.x = rect->srcOffset.x;
+ meta.src.y = rect->srcOffset.y;
- meta.dst.lod = rect->destSubresource.mipLevel;
- meta.dst.layer = rect->destSubresource.arraySlice;
- meta.dst.x = rect->destOffset.x;
- meta.dst.y = rect->destOffset.y;
+ meta.dst.lod = rect->destSubresource.mipLevel;
+ meta.dst.layer = rect->destSubresource.arraySlice + arraySlice;
+ meta.dst.x = rect->destOffset.x;
+ meta.dst.y = rect->destOffset.y;
- meta.width = rect->extent.width;
- meta.height = rect->extent.height;
+ meta.width = rect->extent.width;
+ meta.height = rect->extent.height;
- cmd_meta_set_dst_for_img(cmd, dst, format,
- meta.dst.lod, meta.dst.layer, &meta);
+ cmd_meta_set_dst_for_img(cmd, dst, format,
+ meta.dst.lod, meta.dst.layer, &meta);
- cmd_draw_meta(cmd, &meta);
+ cmd_draw_meta(cmd, &meta);
+ }
}
}
diff --git a/include/vulkan.h b/include/vulkan.h
index 134a350..d183e73 100644
--- a/include/vulkan.h
+++ b/include/vulkan.h
@@ -1815,10 +1815,10 @@
typedef struct VkImageResolve_
{
VkImageSubresource srcSubresource;
- VkOffset2D srcOffset;
+ VkOffset3D srcOffset;
VkImageSubresource destSubresource;
- VkOffset2D destOffset;
- VkExtent2D extent;
+ VkOffset3D destOffset;
+ VkExtent3D extent;
} VkImageResolve;
typedef struct VkShaderCreateInfo_