mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 15:00:10 +01:00
nvk: Capture/replay buffer addresses for EDB capture/replay
Fixes:3f1c3f04be("nvk: Advertise VK_EXT_descriptor_buffer") (cherry picked from commit998dbd43d3) Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38167>
This commit is contained in:
parent
ba107091c2
commit
7f75931019
3 changed files with 30 additions and 5 deletions
|
|
@ -164,7 +164,7 @@
|
|||
"description": "nvk: Capture/replay buffer addresses for EDB capture/replay",
|
||||
"nominated": true,
|
||||
"nomination_type": 2,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "3f1c3f04be93a3efaaac794cd48a825907ad07fe",
|
||||
"notes": null
|
||||
|
|
|
|||
|
|
@ -11,6 +11,10 @@
|
|||
#include "nvk_queue.h"
|
||||
#include "nvkmd/nvkmd.h"
|
||||
|
||||
#define NVK_BUFFER_CREATE_CAPTURE_REPLAY_BITS \
|
||||
(VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT | \
|
||||
VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT)
|
||||
|
||||
static uint32_t
|
||||
nvk_get_buffer_alignment(const struct nvk_physical_device *pdev,
|
||||
VkBufferUsageFlags2KHR usage_flags,
|
||||
|
|
@ -32,7 +36,7 @@ nvk_get_buffer_alignment(const struct nvk_physical_device *pdev,
|
|||
alignment = MAX2(alignment, NVK_DGC_ALIGN);
|
||||
|
||||
if (create_flags & (VK_BUFFER_CREATE_SPARSE_BINDING_BIT |
|
||||
VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT))
|
||||
NVK_BUFFER_CREATE_CAPTURE_REPLAY_BITS))
|
||||
alignment = MAX2(alignment, pdev->nvkmd->bind_align_B);
|
||||
|
||||
return alignment;
|
||||
|
|
@ -70,6 +74,22 @@ nvk_get_bda_replay_addr(const VkBufferCreateInfo *pCreateInfo)
|
|||
break;
|
||||
}
|
||||
|
||||
case VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT: {
|
||||
const VkOpaqueCaptureDescriptorDataCreateInfoEXT *dd = (void *)ext;
|
||||
if (dd->opaqueCaptureDescriptorData != NULL) {
|
||||
uint64_t dd_addr = 0;
|
||||
memcpy(&dd_addr, dd->opaqueCaptureDescriptorData, sizeof(dd_addr));
|
||||
|
||||
#ifdef NDEBUG
|
||||
return dd_addr;
|
||||
#else
|
||||
assert(addr == 0 || dd_addr == addr);
|
||||
addr = dd_addr;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -98,7 +118,7 @@ nvk_CreateBuffer(VkDevice device,
|
|||
|
||||
if (buffer->vk.size > 0 &&
|
||||
(buffer->vk.create_flags & (VK_BUFFER_CREATE_SPARSE_BINDING_BIT |
|
||||
VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT))) {
|
||||
NVK_BUFFER_CREATE_CAPTURE_REPLAY_BITS))) {
|
||||
const uint32_t alignment =
|
||||
nvk_get_buffer_alignment(nvk_device_physical(dev),
|
||||
buffer->vk.usage,
|
||||
|
|
@ -111,7 +131,7 @@ nvk_CreateBuffer(VkDevice device,
|
|||
va_flags |= NVKMD_VA_SPARSE;
|
||||
|
||||
uint64_t fixed_addr = 0;
|
||||
if (buffer->vk.create_flags & VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT) {
|
||||
if (buffer->vk.create_flags & NVK_BUFFER_CREATE_CAPTURE_REPLAY_BITS) {
|
||||
va_flags |= NVKMD_VA_REPLAY;
|
||||
|
||||
fixed_addr = nvk_get_bda_replay_addr(pCreateInfo);
|
||||
|
|
@ -327,5 +347,10 @@ nvk_GetBufferOpaqueCaptureDescriptorDataEXT(
|
|||
const VkBufferCaptureDescriptorDataInfoEXT *pInfo,
|
||||
void *pData)
|
||||
{
|
||||
VK_FROM_HANDLE(nvk_buffer, buffer, pInfo->buffer);
|
||||
const uint64_t addr = vk_buffer_address(&buffer->vk, 0);
|
||||
|
||||
memcpy(pData, &addr, sizeof(addr));
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1045,7 +1045,7 @@ nvk_get_device_properties(const struct nvk_instance *instance,
|
|||
.maxSamplerDescriptorBufferBindings = 32,
|
||||
.maxEmbeddedImmutableSamplerBindings = 32,
|
||||
.maxEmbeddedImmutableSamplers = 4000,
|
||||
.bufferCaptureReplayDescriptorDataSize = 0,
|
||||
.bufferCaptureReplayDescriptorDataSize = sizeof(uint64_t),
|
||||
.imageCaptureReplayDescriptorDataSize = 0,
|
||||
.imageViewCaptureReplayDescriptorDataSize =
|
||||
sizeof(struct nvk_image_view_capture),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue