dzn: Cache GPUVA for buffers
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20919>
This commit is contained in:
@@ -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:
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user