vulkan/wsi: propagate protected swapchain to images

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
Reviewed-by: José Roberto de Souza <None>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26182>
This commit is contained in:
Lionel Landwerlin 2021-01-11 18:55:39 +02:00 committed by Marge Bot
parent 513ba040fc
commit e722665d65
2 changed files with 16 additions and 2 deletions

View file

@ -442,6 +442,7 @@ wsi_swapchain_init(const struct wsi_device *wsi,
vk_object_base_init(device, &chain->base, VK_OBJECT_TYPE_SWAPCHAIN_KHR);
chain->create_flags = pCreateInfo->flags;
chain->wsi = wsi;
chain->device = _device;
chain->alloc = *pAllocator;
@ -459,6 +460,9 @@ wsi_swapchain_init(const struct wsi_device *wsi,
if (!chain->cmd_pools)
return VK_ERROR_OUT_OF_HOST_MEMORY;
const VkCommandPoolCreateFlags cmd_pool_flags =
(pCreateInfo->flags & VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR) ?
VK_COMMAND_POOL_CREATE_PROTECTED_BIT : 0;
for (uint32_t i = 0; i < cmd_pools_count; i++) {
int queue_family_index = i;
@ -476,7 +480,7 @@ wsi_swapchain_init(const struct wsi_device *wsi,
const VkCommandPoolCreateInfo cmd_pool_info = {
.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
.pNext = NULL,
.flags = 0,
.flags = cmd_pool_flags,
.queueFamilyIndex = queue_family_index,
};
result = wsi->CreateCommandPool(_device, &cmd_pool_info, &chain->alloc,
@ -613,9 +617,13 @@ wsi_configure_image(const struct wsi_swapchain *chain,
for (uint32_t i = 0; i < pCreateInfo->queueFamilyIndexCount; i++)
queue_family_indices[i] = pCreateInfo->pQueueFamilyIndices[i];
const VkImageCreateFlags protected_flag =
(pCreateInfo->flags & VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR) ?
VK_IMAGE_CREATE_PROTECTED_BIT : 0;
info->create = (VkImageCreateInfo) {
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
.flags = VK_IMAGE_CREATE_ALIAS_BIT,
.flags = VK_IMAGE_CREATE_ALIAS_BIT | protected_flag,
.imageType = VK_IMAGE_TYPE_2D,
.format = pCreateInfo->imageFormat,
.extent = {
@ -1790,6 +1798,9 @@ wsi_create_buffer_blit_context(const struct wsi_swapchain *chain,
const struct wsi_device *wsi = chain->wsi;
VkResult result;
const VkBufferUsageFlags create_flags =
(chain->create_flags & VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR) ?
VK_BUFFER_CREATE_PROTECTED_BIT : 0;
const VkExternalMemoryBufferCreateInfo buffer_external_info = {
.sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO,
.pNext = NULL,
@ -1798,6 +1809,7 @@ wsi_create_buffer_blit_context(const struct wsi_swapchain *chain,
const VkBufferCreateInfo buffer_info = {
.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
.pNext = &buffer_external_info,
.flags = create_flags,
.size = info->linear_size,
.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT,
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,

View file

@ -173,6 +173,8 @@ struct wsi_swapchain {
const struct wsi_device *wsi;
VkSwapchainCreateFlagsKHR create_flags;
VkDevice device;
VkAllocationCallbacks alloc;
VkFence* fences;