=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d: Introduce vkd3d_create_buffer_view_for_resource().

Alexandre Julliard julliard at winehq.org
Tue Jun 4 16:27:40 CDT 2019


Module: vkd3d
Branch: master
Commit: c065f873810a46900055b6bc8401a4f65cdf4cd0
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=c065f873810a46900055b6bc8401a4f65cdf4cd0

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Tue Jun  4 14:28:56 2019 +0200

vkd3d: Introduce vkd3d_create_buffer_view_for_resource().

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 libs/vkd3d/resource.c | 57 +++++++++++++++++++++++++++++----------------------
 1 file changed, 33 insertions(+), 24 deletions(-)

diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c
index 70a04eb..79d4fef 100644
--- a/libs/vkd3d/resource.c
+++ b/libs/vkd3d/resource.c
@@ -1659,7 +1659,7 @@ void d3d12_desc_copy(struct d3d12_desc *dst, const struct d3d12_desc *src,
 }
 
 static bool vkd3d_create_vk_buffer_view(struct d3d12_device *device,
-        struct d3d12_resource *resource, const struct vkd3d_format *format,
+        VkBuffer vk_buffer, const struct vkd3d_format *format,
         VkDeviceSize offset, VkDeviceSize range, VkBufferView *vk_view)
 {
     const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
@@ -1667,8 +1667,6 @@ static bool vkd3d_create_vk_buffer_view(struct d3d12_device *device,
     struct VkBufferViewCreateInfo view_desc;
     VkResult vr;
 
-    assert(d3d12_resource_is_buffer(resource));
-
     if (vkd3d_format_is_compressed(format))
     {
         WARN("Invalid format for buffer view %#x.\n", format->dxgi_format);
@@ -1684,7 +1682,7 @@ static bool vkd3d_create_vk_buffer_view(struct d3d12_device *device,
     view_desc.sType = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO;
     view_desc.pNext = NULL;
     view_desc.flags = 0;
-    view_desc.buffer = resource->u.vk_buffer;
+    view_desc.buffer = vk_buffer;
     view_desc.format = format->vk_format;
     view_desc.offset = offset;
     view_desc.range = range;
@@ -1693,18 +1691,37 @@ static bool vkd3d_create_vk_buffer_view(struct d3d12_device *device,
     return vr == VK_SUCCESS;
 }
 
+static bool vkd3d_create_buffer_view(struct d3d12_device *device,
+        VkBuffer vk_buffer, const struct vkd3d_format *format,
+        VkDeviceSize offset, VkDeviceSize size, struct vkd3d_view **view)
+{
+    const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
+    struct vkd3d_view *object;
+    VkBufferView vk_view;
+
+    if (!vkd3d_create_vk_buffer_view(device, vk_buffer, format, offset, size, &vk_view))
+        return false;
+
+    if (!(object = vkd3d_view_create()))
+    {
+        VK_CALL(vkDestroyBufferView(device->vk_device, vk_view, NULL));
+        return false;
+    }
+
+    object->u.vk_buffer_view = vk_view;
+    *view = object;
+    return true;
+}
+
 #define VKD3D_VIEW_RAW_BUFFER 0x1
 
-static bool vkd3d_create_buffer_view(struct d3d12_device *device,
+static bool vkd3d_create_buffer_view_for_resource(struct d3d12_device *device,
         struct d3d12_resource *resource, DXGI_FORMAT view_format,
         unsigned int offset, unsigned int size, unsigned int structure_stride,
         unsigned int flags, struct vkd3d_view **view)
 {
-    const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
     const struct vkd3d_format *format;
     VkDeviceSize element_size;
-    struct vkd3d_view *object;
-    VkBufferView vk_view;
 
     if (view_format == DXGI_FORMAT_R32_TYPELESS && (flags & VKD3D_VIEW_RAW_BUFFER))
     {
@@ -1726,19 +1743,10 @@ static bool vkd3d_create_buffer_view(struct d3d12_device *device,
         return false;
     }
 
-    if (!vkd3d_create_vk_buffer_view(device, resource, format,
-            offset * element_size, size * element_size, &vk_view))
-        return false;
-
-    if (!(object = vkd3d_view_create()))
-    {
-        VK_CALL(vkDestroyBufferView(device->vk_device, vk_view, NULL));
-        return false;
-    }
+    assert(d3d12_resource_is_buffer(resource));
 
-    object->u.vk_buffer_view = vk_view;
-    *view = object;
-    return true;
+    return vkd3d_create_buffer_view(device, resource->u.vk_buffer,
+            format, offset * element_size, size * element_size, view);
 }
 
 static void vkd3d_set_view_swizzle_for_format(VkComponentMapping *components,
@@ -2101,7 +2109,7 @@ static void vkd3d_create_buffer_srv(struct d3d12_desc *descriptor,
     }
 
     flags = vkd3d_view_flags_from_d3d12_buffer_srv_flags(desc->u.Buffer.Flags);
-    if (!vkd3d_create_buffer_view(device, resource, desc->Format,
+    if (!vkd3d_create_buffer_view_for_resource(device, resource, desc->Format,
             desc->u.Buffer.FirstElement, desc->u.Buffer.NumElements,
             desc->u.Buffer.StructureByteStride, flags, &view))
         return;
@@ -2249,7 +2257,7 @@ static void vkd3d_create_buffer_uav(struct d3d12_desc *descriptor, struct d3d12_
         FIXME("Ignoring counter offset %"PRIu64".\n", desc->u.Buffer.CounterOffsetInBytes);
 
     flags = vkd3d_view_flags_from_d3d12_buffer_uav_flags(desc->u.Buffer.Flags);
-    if (!vkd3d_create_buffer_view(device, resource, desc->Format,
+    if (!vkd3d_create_buffer_view_for_resource(device, resource, desc->Format,
             desc->u.Buffer.FirstElement, desc->u.Buffer.NumElements,
             desc->u.Buffer.StructureByteStride, flags, &view))
         return;
@@ -2266,7 +2274,7 @@ static void vkd3d_create_buffer_uav(struct d3d12_desc *descriptor, struct d3d12_
         assert(desc->u.Buffer.StructureByteStride);
 
         format = vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false);
-        if (!vkd3d_create_vk_buffer_view(device, counter_resource, format,
+        if (!vkd3d_create_vk_buffer_view(device, counter_resource->u.vk_buffer, format,
                 desc->u.Buffer.CounterOffsetInBytes, sizeof(uint32_t), &view->vk_counter_view))
         {
             WARN("Failed to create counter buffer view.\n");
@@ -2376,7 +2384,8 @@ bool vkd3d_create_raw_buffer_view(struct d3d12_device *device,
 
     format = vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false);
     resource = vkd3d_gpu_va_allocator_dereference(&device->gpu_va_allocator, gpu_address);
-    return vkd3d_create_vk_buffer_view(device, resource, format,
+    assert(d3d12_resource_is_buffer(resource));
+    return vkd3d_create_vk_buffer_view(device, resource->u.vk_buffer, format,
             gpu_address - resource->gpu_address, VK_WHOLE_SIZE, vk_buffer_view);
 }
 




More information about the wine-cvs mailing list