From: "Rémi Bernon" Subject: Re: [PATCH vkd3d 1/5] vkd3d: Use helper functions for null resource initialisation. Message-Id: <6deae4c8-7c99-62a6-12bd-524806ecbb73@codeweavers.com> Date: Wed, 11 Dec 2019 14:14:06 +0100 In-Reply-To: <20191210145708.24068-2-cmccarthy@codeweavers.com> References: <20191210145708.24068-1-cmccarthy@codeweavers.com> <20191210145708.24068-2-cmccarthy@codeweavers.com> 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.html#VUID-VkImageCreateInfo-imageType-00970) I'm not sure what's right, but I guess use_sparse_resources could be 0 when dimension is 1D. -- Rémi Bernon