From f391c2db62befae64aebe1f1c3bdf33e7c8580eb Mon Sep 17 00:00:00 2001 From: Jesse Natalie Date: Wed, 25 Jan 2023 09:03:52 -0800 Subject: [PATCH] dzn: Cache GPUVA for buffers Part-of: --- src/microsoft/vulkan/dzn_cmd_buffer.c | 4 ++-- src/microsoft/vulkan/dzn_descriptor_set.c | 2 +- src/microsoft/vulkan/dzn_device.c | 2 ++ src/microsoft/vulkan/dzn_private.h | 1 + 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/microsoft/vulkan/dzn_cmd_buffer.c b/src/microsoft/vulkan/dzn_cmd_buffer.c index de489e9..31442ee 100644 --- a/src/microsoft/vulkan/dzn_cmd_buffer.c +++ b/src/microsoft/vulkan/dzn_cmd_buffer.c @@ -4993,7 +4993,7 @@ dzn_CmdBindVertexBuffers(VkCommandBuffer commandBuffer, for (uint32_t i = 0; i < bindingCount; i++) { VK_FROM_HANDLE(dzn_buffer, buf, pBuffers[i]); - vbviews[firstBinding + i].BufferLocation = ID3D12Resource_GetGPUVirtualAddress(buf->res) + pOffsets[i]; + vbviews[firstBinding + i].BufferLocation = buf->gpuva + pOffsets[i]; vbviews[firstBinding + i].SizeInBytes = buf->size - pOffsets[i]; } @@ -5010,7 +5010,7 @@ dzn_CmdBindIndexBuffer(VkCommandBuffer commandBuffer, VK_FROM_HANDLE(dzn_cmd_buffer, cmdbuf, commandBuffer); VK_FROM_HANDLE(dzn_buffer, buf, buffer); - cmdbuf->state.ib.view.BufferLocation = ID3D12Resource_GetGPUVirtualAddress(buf->res) + offset; + cmdbuf->state.ib.view.BufferLocation = buf->gpuva + offset; cmdbuf->state.ib.view.SizeInBytes = buf->size - offset; switch (indexType) { case VK_INDEX_TYPE_UINT16: diff --git a/src/microsoft/vulkan/dzn_descriptor_set.c b/src/microsoft/vulkan/dzn_descriptor_set.c index 0aecf34..e691c95 100644 --- a/src/microsoft/vulkan/dzn_descriptor_set.c +++ b/src/microsoft/vulkan/dzn_descriptor_set.c @@ -985,7 +985,7 @@ dzn_descriptor_heap_write_buffer_desc(struct dzn_descriptor_heap *heap, info->type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC) { assert(!writeable); D3D12_CONSTANT_BUFFER_VIEW_DESC cbv_desc = { - .BufferLocation = ID3D12Resource_GetGPUVirtualAddress(info->buffer->res) + info->offset, + .BufferLocation = info->buffer->gpuva + info->offset, .SizeInBytes = ALIGN_POT(size, 256), }; ID3D12Device1_CreateConstantBufferView(heap->dev, &cbv_desc, view_handle); diff --git a/src/microsoft/vulkan/dzn_device.c b/src/microsoft/vulkan/dzn_device.c index 1bd16a3..21e99e2 100644 --- a/src/microsoft/vulkan/dzn_device.c +++ b/src/microsoft/vulkan/dzn_device.c @@ -2923,6 +2923,8 @@ dzn_BindBufferMemory2(VkDevice _device, &IID_ID3D12Resource, (void **)&buffer->res))) return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); + + buffer->gpuva = ID3D12Resource_GetGPUVirtualAddress(buffer->res); } return VK_SUCCESS; diff --git a/src/microsoft/vulkan/dzn_private.h b/src/microsoft/vulkan/dzn_private.h index f05b049..5fc9026 100644 --- a/src/microsoft/vulkan/dzn_private.h +++ b/src/microsoft/vulkan/dzn_private.h @@ -1031,6 +1031,7 @@ struct dzn_buffer { VkBufferUsageFlags usage; D3D12_BARRIER_ACCESS valid_access; + D3D12_GPU_VIRTUAL_ADDRESS gpuva; }; DXGI_FORMAT -- 2.7.4