diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index 31b7cba4..a35bc716 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -538,8 +538,6 @@ static HRESULT vkd3d_get_image_create_info(struct d3d12_device *device, && desc->Width == desc->Height && desc->DepthOrArraySize >= 6 && desc->SampleDesc.Count == 1) image_info->flags |= VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT; - if (desc->Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D) - image_info->flags |= VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR; if (sparse_resource) { @@ -631,6 +629,11 @@ static HRESULT vkd3d_get_image_create_info(struct d3d12_device *device, if (vkd3d_resource_can_be_vrs(device, heap_properties, desc)) image_info->usage |= VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR; + /* Additional image flags as necessary */ + if (image_info->imageType == VK_IMAGE_TYPE_3D && + (image_info->usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)) + image_info->flags |= VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT; + use_concurrent = !!(device->unique_queue_mask & (device->unique_queue_mask - 1)); if (!(desc->Flags & D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS))