On 12/10/19 3:57 PM, Conor McCarthy wrote:
+static HRESULT vkd3d_create_null_ua_texture(struct d3d12_device *device, D3D12_RESOURCE_DIMENSION dimension,
VkImage *vk_image, VkDeviceMemory *vk_memory)
+{
- const bool use_sparse_resources = device->vk_info.sparse_properties.residencyNonResidentStrict;
- D3D12_HEAP_PROPERTIES heap_properties;
- D3D12_RESOURCE_DESC resource_desc;
- HRESULT hr;
- memset(&heap_properties, 0, sizeof(heap_properties));
- heap_properties.Type = D3D12_HEAP_TYPE_DEFAULT;
- resource_desc.Dimension = dimension;
- resource_desc.Alignment = 0;
- resource_desc.Width = 1;
- resource_desc.Height = 1;
- resource_desc.DepthOrArraySize = 1;
- resource_desc.MipLevels = 1;
- resource_desc.Format = VKD3D_NULL_VIEW_FORMAT;
- resource_desc.SampleDesc.Count = 1;
- resource_desc.SampleDesc.Quality = 0;
- resource_desc.Layout = use_sparse_resources
? D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE : D3D12_TEXTURE_LAYOUT_UNKNOWN;
- resource_desc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS;
- if (FAILED(hr = vkd3d_create_image(device, use_sparse_resources ? NULL : &heap_properties, D3D12_HEAP_FLAG_NONE,
&resource_desc, NULL, vk_image)))
return hr;
- if (!use_sparse_resources && FAILED(hr = vkd3d_allocate_image_memory(device, *vk_image,
&heap_properties, D3D12_HEAP_FLAG_NONE, vk_memory, NULL, NULL)))
return hr;
- return S_OK;
+}
I believe this triggers this vulkan validation error when used to create null 1D uav image in the following patch:
[ VUID-VkImageCreateInfo-imageType-00970 ] Object: VK_NULL_HANDLE (Type = 0) | vkCreateImage: cannot specify VK_IMAGE_CREATE_SPARSE_BINDING_BIT for 1D image. The Vulkan spec states: If imageType is VK_IMAGE_TYPE_1D, flags must not contain VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT (https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.htm...)
I'm not sure what's right, but I guess use_sparse_resources could be 0 when dimension is 1D.