summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2017-10-07 14:37:50 -0700
committerJason Ekstrand <[email protected]>2017-10-07 17:12:38 -0700
commit6c7720ed78db754d52f204cbb74897aa9e65ea7e (patch)
tree8c4a33c2f8f17de0e25886c2fd12079eadf188ae
parente262845e371217d23e345d2e315931e01aa0ee04 (diff)
anv/wsi: Allocate enough memory for the entire image
Previously, we allocated memory for image->plane[0].surface.isl.size which is great if there is no compression. However, on BDW, we can do CCS_D on X-tiled images so we also have to allocate space for the auxiliary buffer. This fixes hangs in some of the WSI CTS tests and should also reduce hangs in real applications. In particular, it fixes the dEQP-VK.wsi.*.incremental_present.* test group. When we hand the image off to X11 or Wayland, it will ignore the CCS entirely which is ok because we do a resolve when it's transitioned to VK_IMAGE_LAYOUT_PRESENT_SRC_KHR. Reviewed-by: Lionel Landwerlin <[email protected]> Cc: [email protected]
-rw-r--r--src/intel/vulkan/anv_wsi.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/intel/vulkan/anv_wsi.c b/src/intel/vulkan/anv_wsi.c
index 3fca076894c..fc0c2889d3d 100644
--- a/src/intel/vulkan/anv_wsi.c
+++ b/src/intel/vulkan/anv_wsi.c
@@ -221,7 +221,7 @@ anv_wsi_image_create(VkDevice device_h,
result = anv_AllocateMemory(anv_device_to_handle(device),
&(VkMemoryAllocateInfo) {
.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
- .allocationSize = image->planes[0].surface.isl.size,
+ .allocationSize = image->size,
.memoryTypeIndex = 0,
},
NULL /* XXX: pAllocator */,
@@ -239,6 +239,7 @@ anv_wsi_image_create(VkDevice device_h,
memory->bo->flags |= EXEC_OBJECT_WRITE;
anv_BindImageMemory(device_h, image_h, memory_h, 0);
+ assert(image->size == 0);
struct anv_surface *surface = &image->planes[0].surface;
assert(surface->isl.tiling == ISL_TILING_X);
@@ -266,8 +267,8 @@ anv_wsi_image_create(VkDevice device_h,
*image_p = image_h;
*memory_p = memory_h;
*fd_p = fd;
- *size = image->planes[0].surface.isl.size;
- *offset = image->planes[0].surface.offset;
+ *size = image->size;
+ *offset = 0;
return VK_SUCCESS;
fail_alloc_memory:
anv_FreeMemory(device_h, memory_h, pAllocator);