Module: vkd3d Branch: master Commit: 0b6748149676972f84823ac9915da2bd1faebf51 URL: https://gitlab.winehq.org/wine/vkd3d/-/commit/0b6748149676972f84823ac9915da2...
Author: Conor McCarthy cmccarthy@codeweavers.com Date: Fri May 26 12:29:00 2023 +1000
vkd3d: Validate tiled resources tier for 3D textures.
---
libs/vkd3d/device.c | 1 + libs/vkd3d/resource.c | 9 +++++++++ libs/vkd3d/vkd3d_private.h | 1 + 3 files changed, 11 insertions(+)
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 3cb43bb4..b9a8943c 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -1465,6 +1465,7 @@ static HRESULT vkd3d_init_device_caps(struct d3d12_device *device, vulkan_info->device_limits = physical_device_info->properties2.properties.limits; vulkan_info->sparse_properties = physical_device_info->properties2.properties.sparseProperties; vulkan_info->sparse_binding = features->sparseBinding; + vulkan_info->sparse_residency_3d = features->sparseResidencyImage3D; vulkan_info->rasterization_stream = physical_device_info->xfb_properties.transformFeedbackRasterizationStreamSelect; vulkan_info->transform_feedback_queries = physical_device_info->xfb_properties.transformFeedbackQueries; vulkan_info->uav_read_without_format = features->shaderStorageImageReadWithoutFormat; diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index d93993b4..f305ca8c 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -1679,6 +1679,15 @@ HRESULT d3d12_resource_validate_desc(const D3D12_RESOURCE_DESC *desc, struct d3d return E_INVALIDARG; }
+ if (desc->Layout == D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE) + { + if (desc->Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D && !device->vk_info.sparse_residency_3d) + { + WARN("The device does not support tiled 3D images.\n"); + return E_INVALIDARG; + } + } + if (!d3d12_resource_validate_texture_format(desc, format) || !d3d12_resource_validate_texture_alignment(desc, format)) return E_INVALIDARG; diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 2acfae68..56a518fb 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -151,6 +151,7 @@ struct vkd3d_vulkan_info
VkPhysicalDeviceSparseProperties sparse_properties; bool sparse_binding; + bool sparse_residency_3d;
VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT texel_buffer_alignment_properties;