From: Conor McCarthy Subject: [PATCH vkd3d 2/5] vkd3d: Add 1D null resources. Message-Id: <20191210145708.24068-3-cmccarthy@codeweavers.com> Date: Wed, 11 Dec 2019 00:57:05 +1000 In-Reply-To: <20191210145708.24068-1-cmccarthy@codeweavers.com> References: <20191210145708.24068-1-cmccarthy@codeweavers.com> Signed-off-by: Conor McCarthy --- libs/vkd3d/resource.c | 51 ++++++++++++++++++++++++++++++++++++++ libs/vkd3d/vkd3d_private.h | 6 +++++ 2 files changed, 57 insertions(+) diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index ab4df8e..271b881 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -2586,6 +2586,15 @@ static void vkd3d_create_null_srv(struct d3d12_desc *descriptor, } return; + case D3D12_SRV_DIMENSION_TEXTURE1D: + vk_image = null_resources->vk_1d_image; + vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_1D; + break; + case D3D12_SRV_DIMENSION_TEXTURE1DARRAY: + vk_image = null_resources->vk_1d_image; + vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_1D_ARRAY; + break; + case D3D12_SRV_DIMENSION_TEXTURE2D: vk_image = null_resources->vk_2d_image; vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_2D; @@ -2793,6 +2802,15 @@ static void vkd3d_create_null_uav(struct d3d12_desc *descriptor, } return; + case D3D12_UAV_DIMENSION_TEXTURE1D: + vk_image = null_resources->vk_1d_storage_image; + vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_1D; + break; + case D3D12_UAV_DIMENSION_TEXTURE1DARRAY: + vk_image = null_resources->vk_1d_storage_image; + vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_1D_ARRAY; + break; + case D3D12_UAV_DIMENSION_TEXTURE2D: vk_image = null_resources->vk_2d_storage_image; vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_2D; @@ -3890,6 +3908,10 @@ static HRESULT vkd3d_init_null_resources_data(struct vkd3d_null_resources *null_ if (use_sparse_resources) { + /* transition 1D UAV image */ + vkd3d_transition_null_image(vk_command_buffer, null_resource->vk_1d_storage_image, + VK_IMAGE_LAYOUT_GENERAL, vk_procs); + /* transition 2D UAV image */ vkd3d_transition_null_image(vk_command_buffer, null_resource->vk_2d_storage_image, VK_IMAGE_LAYOUT_GENERAL, vk_procs); @@ -3900,10 +3922,17 @@ static HRESULT vkd3d_init_null_resources_data(struct vkd3d_null_resources *null_ VK_CALL(vkCmdFillBuffer(vk_command_buffer, null_resource->vk_storage_buffer, 0, VK_WHOLE_SIZE, 0x00000000)); + /* clear 1D UAV image */ + vkd3d_clear_null_ua_image(vk_command_buffer, null_resource->vk_1d_storage_image, vk_procs); + /* clear 2D UAV image */ vkd3d_clear_null_ua_image(vk_command_buffer, null_resource->vk_2d_storage_image, vk_procs); } + /* transition 1D SRV image */ + vkd3d_transition_null_image(vk_command_buffer, null_resource->vk_1d_image, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, vk_procs); + /* transition 2D SRV image */ vkd3d_transition_null_image(vk_command_buffer, null_resource->vk_2d_image, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, vk_procs); @@ -4067,6 +4096,16 @@ HRESULT vkd3d_init_null_resources(struct vkd3d_null_resources *null_resources, &heap_properties, D3D12_HEAP_FLAG_NONE, &null_resources->vk_storage_buffer_memory, NULL, NULL))) goto fail; + /* 1D SRV */ + if (FAILED(hr = vkd3d_create_null_sr_texture(device, D3D12_RESOURCE_DIMENSION_TEXTURE1D, 1, false, + &null_resources->vk_1d_image, &null_resources->vk_1d_image_memory))) + goto fail; + + /* 1D UAV */ + if (FAILED(hr = vkd3d_create_null_ua_texture(device, D3D12_RESOURCE_DIMENSION_TEXTURE1D, + &null_resources->vk_1d_storage_image, &null_resources->vk_1d_storage_image_memory))) + goto fail; + /* 2D SRV */ if (FAILED(hr = vkd3d_create_null_sr_texture(device, D3D12_RESOURCE_DIMENSION_TEXTURE2D, 1, false, &null_resources->vk_2d_image, &null_resources->vk_2d_image_memory))) @@ -4084,6 +4123,12 @@ HRESULT vkd3d_init_null_resources(struct vkd3d_null_resources *null_resources, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, "NULL memory"); vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_storage_buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, "NULL UAV buffer"); + vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_1d_image, + VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, "NULL 1D SRV image"); + vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_1d_image_memory, + VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, "NULL 1D SRV memory"); + vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_1d_storage_image, + VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, "NULL 1D UAV image"); vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_2d_image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, "NULL 2D SRV image"); vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_2d_image_memory, @@ -4117,6 +4162,12 @@ void vkd3d_destroy_null_resources(struct vkd3d_null_resources *null_resources, VK_CALL(vkDestroyBuffer(device->vk_device, null_resources->vk_storage_buffer, NULL)); VK_CALL(vkFreeMemory(device->vk_device, null_resources->vk_storage_buffer_memory, NULL)); + VK_CALL(vkDestroyImage(device->vk_device, null_resources->vk_1d_image, NULL)); + VK_CALL(vkFreeMemory(device->vk_device, null_resources->vk_1d_image_memory, NULL)); + + VK_CALL(vkDestroyImage(device->vk_device, null_resources->vk_1d_storage_image, NULL)); + VK_CALL(vkFreeMemory(device->vk_device, null_resources->vk_1d_storage_image_memory, NULL)); + VK_CALL(vkDestroyImage(device->vk_device, null_resources->vk_2d_image, NULL)); VK_CALL(vkFreeMemory(device->vk_device, null_resources->vk_2d_image_memory, NULL)); diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 0c031d2..c23667d 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -1057,6 +1057,12 @@ struct vkd3d_null_resources VkBuffer vk_storage_buffer; VkDeviceMemory vk_storage_buffer_memory; + VkImage vk_1d_image; + VkDeviceMemory vk_1d_image_memory; + + VkImage vk_1d_storage_image; + VkDeviceMemory vk_1d_storage_image_memory; + VkImage vk_2d_image; VkDeviceMemory vk_2d_image_memory; -- 2.24.0