[PATCH vkd3d 4/5] vkd3d: Add 3D null resources.
Conor McCarthy
cmccarthy at codeweavers.com
Tue Dec 10 08:57:07 CST 2019
Signed-off-by: Conor McCarthy <cmccarthy at codeweavers.com>
---
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
More information about the wine-devel
mailing list