vkd3d: Use VK_KHR_bind_memory2
Mesa RADV translates these legacy entrypoints to the 2 variants. Using them directly will cost a bit less CPU cycles. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
parent
b42a7193fc
commit
870dda927d
|
@ -471,6 +471,7 @@ static HRESULT vkd3d_memory_allocation_init(struct vkd3d_memory_allocation *allo
|
||||||
VkMemoryRequirements memory_requirements;
|
VkMemoryRequirements memory_requirements;
|
||||||
VkMemoryAllocateFlagsInfo flags_info;
|
VkMemoryAllocateFlagsInfo flags_info;
|
||||||
VkMemoryPropertyFlags type_flags;
|
VkMemoryPropertyFlags type_flags;
|
||||||
|
VkBindBufferMemoryInfo bind_info;
|
||||||
void *host_ptr = info->host_ptr;
|
void *host_ptr = info->host_ptr;
|
||||||
uint32_t type_mask;
|
uint32_t type_mask;
|
||||||
VkResult vr;
|
VkResult vr;
|
||||||
|
@ -599,8 +600,13 @@ static HRESULT vkd3d_memory_allocation_init(struct vkd3d_memory_allocation *allo
|
||||||
/* Bind memory to global or dedicated buffer as needed */
|
/* Bind memory to global or dedicated buffer as needed */
|
||||||
if (allocation->resource.vk_buffer)
|
if (allocation->resource.vk_buffer)
|
||||||
{
|
{
|
||||||
if ((vr = VK_CALL(vkBindBufferMemory(device->vk_device,
|
bind_info.sType = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO;
|
||||||
allocation->resource.vk_buffer, allocation->device_allocation.vk_memory, 0))) < 0)
|
bind_info.pNext = NULL;
|
||||||
|
bind_info.buffer = allocation->resource.vk_buffer;
|
||||||
|
bind_info.memory = allocation->device_allocation.vk_memory;
|
||||||
|
bind_info.memoryOffset = 0;
|
||||||
|
|
||||||
|
if ((vr = VK_CALL(vkBindBufferMemory2KHR(device->vk_device, 1, &bind_info))) < 0)
|
||||||
{
|
{
|
||||||
ERR("Failed to bind buffer memory, vr %d.\n", vr);
|
ERR("Failed to bind buffer memory, vr %d.\n", vr);
|
||||||
vkd3d_memory_allocation_free(allocation, device, allocator);
|
vkd3d_memory_allocation_free(allocation, device, allocator);
|
||||||
|
@ -1454,6 +1460,7 @@ HRESULT vkd3d_allocate_buffer_memory(struct d3d12_device *device, VkBuffer vk_bu
|
||||||
const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
|
const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
|
||||||
VkMemoryRequirements memory_requirements;
|
VkMemoryRequirements memory_requirements;
|
||||||
VkMemoryAllocateFlagsInfo flags_info;
|
VkMemoryAllocateFlagsInfo flags_info;
|
||||||
|
VkBindBufferMemoryInfo bind_info;
|
||||||
VkResult vr;
|
VkResult vr;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
|
@ -1470,7 +1477,13 @@ HRESULT vkd3d_allocate_buffer_memory(struct d3d12_device *device, VkBuffer vk_bu
|
||||||
type_flags, memory_requirements.memoryTypeBits, &flags_info, allocation)))
|
type_flags, memory_requirements.memoryTypeBits, &flags_info, allocation)))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
if (FAILED(vr = VK_CALL(vkBindBufferMemory(device->vk_device, vk_buffer, allocation->vk_memory, 0))))
|
bind_info.sType = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO;
|
||||||
|
bind_info.pNext = NULL;
|
||||||
|
bind_info.buffer = vk_buffer;
|
||||||
|
bind_info.memory = allocation->vk_memory;
|
||||||
|
bind_info.memoryOffset = 0;
|
||||||
|
|
||||||
|
if (FAILED(vr = VK_CALL(vkBindBufferMemory2KHR(device->vk_device, 1, &bind_info))))
|
||||||
return hresult_from_vk_result(vr);
|
return hresult_from_vk_result(vr);
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
|
@ -1482,6 +1495,7 @@ HRESULT vkd3d_allocate_image_memory(struct d3d12_device *device, VkImage vk_imag
|
||||||
{
|
{
|
||||||
const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
|
const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
|
||||||
VkMemoryRequirements memory_requirements;
|
VkMemoryRequirements memory_requirements;
|
||||||
|
VkBindImageMemoryInfo bind_info;
|
||||||
VkResult vr;
|
VkResult vr;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
|
@ -1491,7 +1505,13 @@ HRESULT vkd3d_allocate_image_memory(struct d3d12_device *device, VkImage vk_imag
|
||||||
type_flags, memory_requirements.memoryTypeBits, NULL, allocation)))
|
type_flags, memory_requirements.memoryTypeBits, NULL, allocation)))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
if (FAILED(vr = VK_CALL(vkBindImageMemory(device->vk_device, vk_image, allocation->vk_memory, 0))))
|
bind_info.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO;
|
||||||
|
bind_info.pNext = NULL;
|
||||||
|
bind_info.image = vk_image;
|
||||||
|
bind_info.memory = allocation->vk_memory;
|
||||||
|
bind_info.memoryOffset = 0;
|
||||||
|
|
||||||
|
if (FAILED(vr = VK_CALL(vkBindImageMemory2KHR(device->vk_device, 1, &bind_info))))
|
||||||
return hresult_from_vk_result(vr);
|
return hresult_from_vk_result(vr);
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
|
|
|
@ -2650,6 +2650,7 @@ HRESULT d3d12_resource_create_committed(struct d3d12_device *device, const D3D12
|
||||||
VkMemoryDedicatedAllocateInfo dedicated_info;
|
VkMemoryDedicatedAllocateInfo dedicated_info;
|
||||||
VkImageMemoryRequirementsInfo2 image_info;
|
VkImageMemoryRequirementsInfo2 image_info;
|
||||||
VkMemoryRequirements2 memory_requirements;
|
VkMemoryRequirements2 memory_requirements;
|
||||||
|
VkBindImageMemoryInfo bind_info;
|
||||||
bool use_dedicated_allocation;
|
bool use_dedicated_allocation;
|
||||||
VkResult vr;
|
VkResult vr;
|
||||||
|
|
||||||
|
@ -2705,8 +2706,13 @@ HRESULT d3d12_resource_create_committed(struct d3d12_device *device, const D3D12
|
||||||
if (FAILED(hr = vkd3d_allocate_memory(device, &device->memory_allocator, &allocate_info, &object->mem)))
|
if (FAILED(hr = vkd3d_allocate_memory(device, &device->memory_allocator, &allocate_info, &object->mem)))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if ((vr = VK_CALL(vkBindImageMemory(device->vk_device, object->res.vk_image,
|
bind_info.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO;
|
||||||
object->mem.device_allocation.vk_memory, object->mem.offset))))
|
bind_info.pNext = NULL;
|
||||||
|
bind_info.image = object->res.vk_image;
|
||||||
|
bind_info.memory = object->mem.device_allocation.vk_memory;
|
||||||
|
bind_info.memoryOffset = object->mem.offset;
|
||||||
|
|
||||||
|
if ((vr = VK_CALL(vkBindImageMemory2KHR(device->vk_device, 1, &bind_info))))
|
||||||
{
|
{
|
||||||
ERR("Failed to bind image memory, vr %d.\n", vr);
|
ERR("Failed to bind image memory, vr %d.\n", vr);
|
||||||
hr = hresult_from_vk_result(vr);
|
hr = hresult_from_vk_result(vr);
|
||||||
|
@ -2779,6 +2785,7 @@ HRESULT d3d12_resource_create_placed(struct d3d12_device *device, const D3D12_RE
|
||||||
{
|
{
|
||||||
const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
|
const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
|
||||||
VkMemoryRequirements memory_requirements;
|
VkMemoryRequirements memory_requirements;
|
||||||
|
VkBindImageMemoryInfo bind_info;
|
||||||
struct d3d12_resource *object;
|
struct d3d12_resource *object;
|
||||||
VkResult vr;
|
VkResult vr;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
@ -2838,8 +2845,13 @@ HRESULT d3d12_resource_create_placed(struct d3d12_device *device, const D3D12_RE
|
||||||
|
|
||||||
if (d3d12_resource_is_texture(object))
|
if (d3d12_resource_is_texture(object))
|
||||||
{
|
{
|
||||||
if ((vr = VK_CALL(vkBindImageMemory(device->vk_device, object->res.vk_image,
|
bind_info.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO;
|
||||||
object->mem.device_allocation.vk_memory, object->mem.offset))) < 0)
|
bind_info.pNext = NULL;
|
||||||
|
bind_info.image = object->res.vk_image;
|
||||||
|
bind_info.memory = object->mem.device_allocation.vk_memory;
|
||||||
|
bind_info.memoryOffset = object->mem.offset;
|
||||||
|
|
||||||
|
if ((vr = VK_CALL(vkBindImageMemory2KHR(device->vk_device, 1, &bind_info))) < 0)
|
||||||
{
|
{
|
||||||
ERR("Failed to bind image memory, vr %d.\n", vr);
|
ERR("Failed to bind image memory, vr %d.\n", vr);
|
||||||
hr = hresult_from_vk_result(vr);
|
hr = hresult_from_vk_result(vr);
|
||||||
|
|
|
@ -61,8 +61,6 @@ VK_DEVICE_PFN(vkAllocateCommandBuffers)
|
||||||
VK_DEVICE_PFN(vkAllocateDescriptorSets)
|
VK_DEVICE_PFN(vkAllocateDescriptorSets)
|
||||||
VK_DEVICE_PFN(vkAllocateMemory)
|
VK_DEVICE_PFN(vkAllocateMemory)
|
||||||
VK_DEVICE_PFN(vkBeginCommandBuffer)
|
VK_DEVICE_PFN(vkBeginCommandBuffer)
|
||||||
VK_DEVICE_PFN(vkBindBufferMemory)
|
|
||||||
VK_DEVICE_PFN(vkBindImageMemory)
|
|
||||||
VK_DEVICE_PFN(vkCmdBeginQuery)
|
VK_DEVICE_PFN(vkCmdBeginQuery)
|
||||||
VK_DEVICE_PFN(vkCmdBeginRenderPass)
|
VK_DEVICE_PFN(vkCmdBeginRenderPass)
|
||||||
VK_DEVICE_PFN(vkCmdBindDescriptorSets)
|
VK_DEVICE_PFN(vkCmdBindDescriptorSets)
|
||||||
|
|
|
@ -823,6 +823,7 @@ static VkDeviceMemory allocate_vulkan_image_memory(ID3D12Device *device,
|
||||||
VkMemoryPropertyFlags required_flags, VkImage vk_image)
|
VkMemoryPropertyFlags required_flags, VkImage vk_image)
|
||||||
{
|
{
|
||||||
VkMemoryRequirements memory_requirements;
|
VkMemoryRequirements memory_requirements;
|
||||||
|
VkBindImageMemoryInfo bind_info;
|
||||||
VkDeviceMemory vk_memory;
|
VkDeviceMemory vk_memory;
|
||||||
VkDevice vk_device;
|
VkDevice vk_device;
|
||||||
VkResult vr;
|
VkResult vr;
|
||||||
|
@ -832,7 +833,13 @@ static VkDeviceMemory allocate_vulkan_image_memory(ID3D12Device *device,
|
||||||
vkGetImageMemoryRequirements(vk_device, vk_image, &memory_requirements);
|
vkGetImageMemoryRequirements(vk_device, vk_image, &memory_requirements);
|
||||||
vk_memory = allocate_vulkan_device_memory(device, required_flags, &memory_requirements);
|
vk_memory = allocate_vulkan_device_memory(device, required_flags, &memory_requirements);
|
||||||
|
|
||||||
vr = vkBindImageMemory(vk_device, vk_image, vk_memory, 0);
|
bind_info.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO;
|
||||||
|
bind_info.pNext = NULL;
|
||||||
|
bind_info.image = vk_image;
|
||||||
|
bind_info.memory = vk_memory;
|
||||||
|
bind_info.memoryOffset = 0;
|
||||||
|
|
||||||
|
vr = vkBindImageMemory2KHR(vk_device, 1, &bind_info);
|
||||||
ok(vr == VK_SUCCESS, "Got unexpected VkResult %d.\n", vr);
|
ok(vr == VK_SUCCESS, "Got unexpected VkResult %d.\n", vr);
|
||||||
|
|
||||||
return vk_memory;
|
return vk_memory;
|
||||||
|
|
Loading…
Reference in New Issue