[PATCH vkd3d v2 2/5] vkd3d: Add 1D null resources.

Conor McCarthy cmccarthy at codeweavers.com
Wed Dec 11 22:38:31 CST 2019


Signed-off-by: Conor McCarthy <cmccarthy at codeweavers.com>
---
 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




More information about the wine-devel mailing list