summaryrefslogtreecommitdiffstats
path: root/src/intel/vulkan/anv_wsi_wayland.c
diff options
context:
space:
mode:
authorLionel Landwerlin <[email protected]>2016-07-04 18:06:58 +0100
committerJason Ekstrand <[email protected]>2016-07-04 10:15:48 -0700
commitdbbc4fb4cc8792fa25125a9c828b649d61113362 (patch)
tree04e718150eece7f160df43bb668158e190a8b099 /src/intel/vulkan/anv_wsi_wayland.c
parent51227b41c6b026f5b0a3925093b91800cdfcc923 (diff)
anv/wsi: create swapchain images using specified image usage
The image usage specified by the caller of vkCreateSwapchainKHR should be passed onto the internal image creation. Otherwise the driver might later crash when the user tries to use the image as a combined sampler even though the creation was explicitly created with VK_IMAGE_USAGE_TRANSFER_SRC_BIT. Leaving the previous VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT as this might be expected even if the swapchain is created without any flag. Signed-off-by: Lionel Landwerlin <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96791 Cc: "12.0" <[email protected]>
Diffstat (limited to 'src/intel/vulkan/anv_wsi_wayland.c')
-rw-r--r--src/intel/vulkan/anv_wsi_wayland.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/intel/vulkan/anv_wsi_wayland.c b/src/intel/vulkan/anv_wsi_wayland.c
index e95359c22c1..a9e161710f9 100644
--- a/src/intel/vulkan/anv_wsi_wayland.c
+++ b/src/intel/vulkan/anv_wsi_wayland.c
@@ -607,7 +607,9 @@ static const struct wl_buffer_listener buffer_listener = {
};
static VkResult
-wsi_wl_image_init(struct wsi_wl_swapchain *chain, struct wsi_wl_image *image,
+wsi_wl_image_init(struct wsi_wl_swapchain *chain,
+ struct wsi_wl_image *image,
+ const VkSwapchainCreateInfoKHR *pCreateInfo,
const VkAllocationCallbacks* pAllocator)
{
VkDevice vk_device = anv_device_to_handle(chain->base.device);
@@ -633,7 +635,8 @@ wsi_wl_image_init(struct wsi_wl_swapchain *chain, struct wsi_wl_image *image,
.samples = 1,
/* FIXME: Need a way to use X tiling to allow scanout */
.tiling = VK_IMAGE_TILING_OPTIMAL,
- .usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
+ .usage = (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
+ pCreateInfo->imageUsage),
.flags = 0,
}},
pAllocator,
@@ -794,7 +797,8 @@ wsi_wl_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
}
for (uint32_t i = 0; i < chain->image_count; i++) {
- result = wsi_wl_image_init(chain, &chain->images[i], pAllocator);
+ result = wsi_wl_image_init(chain, &chain->images[i],
+ pCreateInfo, pAllocator);
if (result != VK_SUCCESS)
goto fail;
chain->images[i].busy = false;