=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d: Move resource memory allocation functions.
Alexandre Julliard
julliard at winehq.org
Mon Jun 24 16:05:58 CDT 2019
Module: vkd3d
Branch: master
Commit: 8d242b32ac6a731a7737a151c435a470c97cf15d
URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=8d242b32ac6a731a7737a151c435a470c97cf15d
Author: Józef Kucia <jkucia at codeweavers.com>
Date: Thu Jun 20 21:08:05 2019 +0200
vkd3d: Move resource memory allocation functions.
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 | 238 +++++++++++++++++++++++++-------------------------
1 file changed, 119 insertions(+), 119 deletions(-)
diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c
index bcf523e..824698a 100644
--- a/libs/vkd3d/resource.c
+++ b/libs/vkd3d/resource.c
@@ -116,6 +116,125 @@ static HRESULT vkd3d_allocate_device_memory(struct d3d12_device *device,
return S_OK;
}
+HRESULT vkd3d_allocate_buffer_memory(struct d3d12_device *device, VkBuffer vk_buffer,
+ const D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS heap_flags,
+ VkDeviceMemory *vk_memory)
+{
+ const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
+ VkMemoryDedicatedAllocateInfo *dedicated_allocation = NULL;
+ VkMemoryDedicatedRequirements dedicated_requirements;
+ VkMemoryDedicatedAllocateInfo dedicated_info;
+ VkMemoryRequirements2 memory_requirements2;
+ VkMemoryRequirements *memory_requirements;
+ VkBufferMemoryRequirementsInfo2 info;
+ VkResult vr;
+ HRESULT hr;
+
+ memory_requirements = &memory_requirements2.memoryRequirements;
+
+ if (device->vk_info.KHR_dedicated_allocation)
+ {
+ info.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2;
+ info.pNext = NULL;
+ info.buffer = vk_buffer;
+
+ dedicated_requirements.sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS;
+ dedicated_requirements.pNext = NULL;
+
+ memory_requirements2.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2;
+ memory_requirements2.pNext = &dedicated_requirements;
+
+ VK_CALL(vkGetBufferMemoryRequirements2KHR(device->vk_device, &info, &memory_requirements2));
+
+ if (dedicated_requirements.prefersDedicatedAllocation)
+ {
+ dedicated_allocation = &dedicated_info;
+
+ dedicated_info.sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO;
+ dedicated_info.pNext = NULL;
+ dedicated_info.image = VK_NULL_HANDLE;
+ dedicated_info.buffer = vk_buffer;
+ }
+ }
+ else
+ {
+ VK_CALL(vkGetBufferMemoryRequirements(device->vk_device, vk_buffer, memory_requirements));
+ }
+
+ if (FAILED(hr = vkd3d_allocate_device_memory(device, heap_properties, heap_flags,
+ memory_requirements, dedicated_allocation, vk_memory, NULL)))
+ return hr;
+
+ if ((vr = VK_CALL(vkBindBufferMemory(device->vk_device, vk_buffer, *vk_memory, 0))) < 0)
+ {
+ WARN("Failed to bind memory, vr %d.\n", vr);
+ VK_CALL(vkFreeMemory(device->vk_device, *vk_memory, NULL));
+ *vk_memory = VK_NULL_HANDLE;
+ }
+
+ return hresult_from_vk_result(vr);
+}
+
+static HRESULT vkd3d_allocate_image_memory(struct d3d12_device *device, VkImage vk_image,
+ const D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS heap_flags,
+ VkDeviceMemory *vk_memory)
+{
+ const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
+ VkMemoryDedicatedAllocateInfo *dedicated_allocation = NULL;
+ VkMemoryDedicatedRequirements dedicated_requirements;
+ VkMemoryDedicatedAllocateInfo dedicated_info;
+ VkMemoryRequirements2 memory_requirements2;
+ VkMemoryRequirements *memory_requirements;
+ VkImageMemoryRequirementsInfo2 info;
+ VkResult vr;
+ HRESULT hr;
+
+ memory_requirements = &memory_requirements2.memoryRequirements;
+
+ if (device->vk_info.KHR_dedicated_allocation)
+ {
+ info.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2;
+ info.pNext = NULL;
+ info.image = vk_image;
+
+ dedicated_requirements.sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS;
+ dedicated_requirements.pNext = NULL;
+
+ memory_requirements2.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2;
+ memory_requirements2.pNext = &dedicated_requirements;
+
+ VK_CALL(vkGetImageMemoryRequirements2KHR(device->vk_device, &info, &memory_requirements2));
+
+ if (dedicated_requirements.prefersDedicatedAllocation)
+ {
+ dedicated_allocation = &dedicated_info;
+
+ dedicated_info.sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO;
+ dedicated_info.pNext = NULL;
+ dedicated_info.image = vk_image;
+ dedicated_info.buffer = VK_NULL_HANDLE;
+ }
+ }
+ else
+ {
+ VK_CALL(vkGetImageMemoryRequirements(device->vk_device, vk_image, memory_requirements));
+ }
+
+ if (FAILED(hr = vkd3d_allocate_device_memory(device, heap_properties, heap_flags,
+ memory_requirements, dedicated_allocation, vk_memory, NULL)))
+ return hr;
+
+ if ((vr = VK_CALL(vkBindImageMemory(device->vk_device, vk_image, *vk_memory, 0))) < 0)
+ {
+ WARN("Failed to bind memory, vr %d.\n", vr);
+ VK_CALL(vkFreeMemory(device->vk_device, *vk_memory, NULL));
+ *vk_memory = VK_NULL_HANDLE;
+ return hresult_from_vk_result(vr);
+ }
+
+ return S_OK;
+}
+
/* ID3D12Heap */
static inline struct d3d12_heap *impl_from_ID3D12Heap(ID3D12Heap *iface)
{
@@ -731,125 +850,6 @@ HRESULT vkd3d_get_image_allocation_info(struct d3d12_device *device,
return hr;
}
-HRESULT vkd3d_allocate_buffer_memory(struct d3d12_device *device, VkBuffer vk_buffer,
- const D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS heap_flags,
- VkDeviceMemory *vk_memory)
-{
- const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
- VkMemoryDedicatedAllocateInfo *dedicated_allocation = NULL;
- VkMemoryDedicatedRequirements dedicated_requirements;
- VkMemoryDedicatedAllocateInfo dedicated_info;
- VkMemoryRequirements2 memory_requirements2;
- VkMemoryRequirements *memory_requirements;
- VkBufferMemoryRequirementsInfo2 info;
- VkResult vr;
- HRESULT hr;
-
- memory_requirements = &memory_requirements2.memoryRequirements;
-
- if (device->vk_info.KHR_dedicated_allocation)
- {
- info.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2;
- info.pNext = NULL;
- info.buffer = vk_buffer;
-
- dedicated_requirements.sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS;
- dedicated_requirements.pNext = NULL;
-
- memory_requirements2.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2;
- memory_requirements2.pNext = &dedicated_requirements;
-
- VK_CALL(vkGetBufferMemoryRequirements2KHR(device->vk_device, &info, &memory_requirements2));
-
- if (dedicated_requirements.prefersDedicatedAllocation)
- {
- dedicated_allocation = &dedicated_info;
-
- dedicated_info.sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO;
- dedicated_info.pNext = NULL;
- dedicated_info.image = VK_NULL_HANDLE;
- dedicated_info.buffer = vk_buffer;
- }
- }
- else
- {
- VK_CALL(vkGetBufferMemoryRequirements(device->vk_device, vk_buffer, memory_requirements));
- }
-
- if (FAILED(hr = vkd3d_allocate_device_memory(device, heap_properties, heap_flags,
- memory_requirements, dedicated_allocation, vk_memory, NULL)))
- return hr;
-
- if ((vr = VK_CALL(vkBindBufferMemory(device->vk_device, vk_buffer, *vk_memory, 0))) < 0)
- {
- WARN("Failed to bind memory, vr %d.\n", vr);
- VK_CALL(vkFreeMemory(device->vk_device, *vk_memory, NULL));
- *vk_memory = VK_NULL_HANDLE;
- }
-
- return hresult_from_vk_result(vr);
-}
-
-static HRESULT vkd3d_allocate_image_memory(struct d3d12_device *device, VkImage vk_image,
- const D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS heap_flags,
- VkDeviceMemory *vk_memory)
-{
- const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
- VkMemoryDedicatedAllocateInfo *dedicated_allocation = NULL;
- VkMemoryDedicatedRequirements dedicated_requirements;
- VkMemoryDedicatedAllocateInfo dedicated_info;
- VkMemoryRequirements2 memory_requirements2;
- VkMemoryRequirements *memory_requirements;
- VkImageMemoryRequirementsInfo2 info;
- VkResult vr;
- HRESULT hr;
-
- memory_requirements = &memory_requirements2.memoryRequirements;
-
- if (device->vk_info.KHR_dedicated_allocation)
- {
- info.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2;
- info.pNext = NULL;
- info.image = vk_image;
-
- dedicated_requirements.sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS;
- dedicated_requirements.pNext = NULL;
-
- memory_requirements2.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2;
- memory_requirements2.pNext = &dedicated_requirements;
-
- VK_CALL(vkGetImageMemoryRequirements2KHR(device->vk_device, &info, &memory_requirements2));
-
- if (dedicated_requirements.prefersDedicatedAllocation)
- {
- dedicated_allocation = &dedicated_info;
-
- dedicated_info.sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO;
- dedicated_info.pNext = NULL;
- dedicated_info.image = vk_image;
- dedicated_info.buffer = VK_NULL_HANDLE;
- }
- }
- else
- {
- VK_CALL(vkGetImageMemoryRequirements(device->vk_device, vk_image, memory_requirements));
- }
-
- if (FAILED(hr = vkd3d_allocate_device_memory(device, heap_properties, heap_flags,
- memory_requirements, dedicated_allocation, vk_memory, NULL)))
- return hr;
-
- if ((vr = VK_CALL(vkBindImageMemory(device->vk_device, vk_image, *vk_memory, 0))) < 0)
- {
- WARN("Failed to bind memory, vr %d.\n", vr);
- VK_CALL(vkFreeMemory(device->vk_device, *vk_memory, NULL));
- *vk_memory = VK_NULL_HANDLE;
- return hresult_from_vk_result(vr);
- }
-
- return S_OK;
-}
-
static void d3d12_resource_destroy(struct d3d12_resource *resource, struct d3d12_device *device)
{
const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
More information about the wine-cvs
mailing list