From: Conor McCarthy Subject: [PATCH vkd3d v2 4/5] vkd3d: Add 3D null resources. Message-Id: <20191212043834.4903-5-cmccarthy@codeweavers.com> Date: Thu, 12 Dec 2019 14:38:33 +1000 In-Reply-To: <20191212043834.4903-1-cmccarthy@codeweavers.com> References: <20191212043834.4903-1-cmccarthy@codeweavers.com> Signed-off-by: Conor McCarthy --- libs/vkd3d/resource.c | 36 ++++++++++++++++++++++++++++++++++++ libs/vkd3d/vkd3d_private.h | 6 ++++++ 2 files changed, 42 insertions(+) diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index 3ca29a2..cd181bc 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -2613,6 +2613,11 @@ static void vkd3d_create_null_srv(struct d3d12_desc *descriptor, vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_2D_ARRAY; break; + case D3D12_SRV_DIMENSION_TEXTURE3D: + vk_image = null_resources->vk_3d_image; + vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_3D; + break; + default: FIXME("Unhandled view dimension %#x.\n", desc->ViewDimension); return; @@ -2829,6 +2834,11 @@ static void vkd3d_create_null_uav(struct d3d12_desc *descriptor, vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_2D_ARRAY; break; + case D3D12_UAV_DIMENSION_TEXTURE3D: + vk_image = null_resources->vk_3d_storage_image; + vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_3D; + break; + default: FIXME("Unhandled view dimension %#x.\n", desc->ViewDimension); return; @@ -3950,6 +3960,10 @@ static HRESULT vkd3d_init_null_resources_data(struct vkd3d_null_resources *null_ vkd3d_transition_null_image(vk_command_buffer, null_resource->vk_2dms_image, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, vk_procs); + /* transition 3D SRV image */ + vkd3d_transition_null_image(vk_command_buffer, null_resource->vk_3d_image, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, vk_procs); + if ((vr = VK_CALL(vkEndCommandBuffer(vk_command_buffer))) < 0) { WARN("Failed to end command buffer, vr %d.\n", vr); @@ -4134,6 +4148,16 @@ HRESULT vkd3d_init_null_resources(struct vkd3d_null_resources *null_resources, &null_resources->vk_2d_storage_image, &null_resources->vk_2d_storage_image_memory))) goto fail; + /* 3D SRV */ + if (FAILED(hr = vkd3d_create_null_sr_texture(device, D3D12_RESOURCE_DIMENSION_TEXTURE3D, 1, false, + &null_resources->vk_3d_image, &null_resources->vk_3d_image_memory))) + goto fail; + + /* 3D UAV */ + if (FAILED(hr = vkd3d_create_null_ua_texture(device, D3D12_RESOURCE_DIMENSION_TEXTURE3D, + &null_resources->vk_3d_storage_image, &null_resources->vk_3d_storage_image_memory))) + goto fail; + /* set Vulkan object names */ vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, "NULL buffer"); @@ -4157,6 +4181,12 @@ HRESULT vkd3d_init_null_resources(struct vkd3d_null_resources *null_resources, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, "NULL 2DMS SRV memory"); vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_2d_storage_image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, "NULL 2D UAV image"); + vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_3d_image, + VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, "NULL 3D SRV image"); + vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_3d_image_memory, + VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, "NULL 3D SRV memory"); + vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_3d_storage_image, + VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, "NULL 3D UAV image"); if (!use_sparse_resources) { vkd3d_set_vk_object_name_utf8(device, (uint64_t)null_resources->vk_storage_buffer_memory, @@ -4199,5 +4229,11 @@ void vkd3d_destroy_null_resources(struct vkd3d_null_resources *null_resources, VK_CALL(vkDestroyImage(device->vk_device, null_resources->vk_2d_storage_image, NULL)); VK_CALL(vkFreeMemory(device->vk_device, null_resources->vk_2d_storage_image_memory, NULL)); + VK_CALL(vkDestroyImage(device->vk_device, null_resources->vk_3d_image, NULL)); + VK_CALL(vkFreeMemory(device->vk_device, null_resources->vk_3d_image_memory, NULL)); + + VK_CALL(vkDestroyImage(device->vk_device, null_resources->vk_3d_storage_image, NULL)); + VK_CALL(vkFreeMemory(device->vk_device, null_resources->vk_3d_storage_image_memory, NULL)); + memset(null_resources, 0, sizeof(*null_resources)); } diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 58a9ce0..5b44a49 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -1071,6 +1071,12 @@ struct vkd3d_null_resources VkImage vk_2dms_image; VkDeviceMemory vk_2dms_image_memory; + + VkImage vk_3d_image; + VkDeviceMemory vk_3d_image_memory; + + VkImage vk_3d_storage_image; + VkDeviceMemory vk_3d_storage_image_memory; }; HRESULT vkd3d_init_null_resources(struct vkd3d_null_resources *null_resources, -- 2.24.0