dzn: Cache GPUVA for buffers

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20919>
This commit is contained in:
Jesse Natalie
2023-01-25 09:03:52 -08:00
committed by Marge Bot
parent 34f372c47c
commit f391c2db62
4 changed files with 6 additions and 3 deletions

View File

@@ -4993,7 +4993,7 @@ dzn_CmdBindVertexBuffers(VkCommandBuffer commandBuffer,
for (uint32_t i = 0; i < bindingCount; i++) { for (uint32_t i = 0; i < bindingCount; i++) {
VK_FROM_HANDLE(dzn_buffer, buf, pBuffers[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]; 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_cmd_buffer, cmdbuf, commandBuffer);
VK_FROM_HANDLE(dzn_buffer, buf, buffer); 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; cmdbuf->state.ib.view.SizeInBytes = buf->size - offset;
switch (indexType) { switch (indexType) {
case VK_INDEX_TYPE_UINT16: case VK_INDEX_TYPE_UINT16:

View File

@@ -985,7 +985,7 @@ dzn_descriptor_heap_write_buffer_desc(struct dzn_descriptor_heap *heap,
info->type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC) { info->type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC) {
assert(!writeable); assert(!writeable);
D3D12_CONSTANT_BUFFER_VIEW_DESC cbv_desc = { 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), .SizeInBytes = ALIGN_POT(size, 256),
}; };
ID3D12Device1_CreateConstantBufferView(heap->dev, &cbv_desc, view_handle); ID3D12Device1_CreateConstantBufferView(heap->dev, &cbv_desc, view_handle);

View File

@@ -2923,6 +2923,8 @@ dzn_BindBufferMemory2(VkDevice _device,
&IID_ID3D12Resource, &IID_ID3D12Resource,
(void **)&buffer->res))) (void **)&buffer->res)))
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
buffer->gpuva = ID3D12Resource_GetGPUVirtualAddress(buffer->res);
} }
return VK_SUCCESS; return VK_SUCCESS;

View File

@@ -1031,6 +1031,7 @@ struct dzn_buffer {
VkBufferUsageFlags usage; VkBufferUsageFlags usage;
D3D12_BARRIER_ACCESS valid_access; D3D12_BARRIER_ACCESS valid_access;
D3D12_GPU_VIRTUAL_ADDRESS gpuva;
}; };
DXGI_FORMAT DXGI_FORMAT