mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
Add names and some missing destroys to GPUBuffers
This commit is contained in:
@@ -841,6 +841,7 @@ GPUBuffer VulkanAccelerationStructureManager::CreateTempReadBackBuffer(VkDevice
|
||||
GPUBuffer result;
|
||||
result.Create(m_pDriver, device, size, 1,
|
||||
GPUBuffer::eGPUBufferReadback | GPUBuffer::eGPUBufferAddressable);
|
||||
result.Name(StringFormat::Fmt("TempReadbackBuffer%llu", size));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -238,6 +238,8 @@ void GPUBuffer::Create(WrappedVulkan *driver, VkDevice dev, VkDeviceSize size, u
|
||||
VkResult vkr = ObjDisp(dev)->CreateBuffer(Unwrap(dev), &bufInfo, NULL, &buf);
|
||||
CHECK_VKR(driver, vkr);
|
||||
|
||||
NameUnwrappedVulkanObject(buf, "Unnamed GPUBuffer");
|
||||
|
||||
VkMemoryRequirements mrq = {};
|
||||
ObjDisp(dev)->GetBufferMemoryRequirements(Unwrap(dev), buf, &mrq);
|
||||
|
||||
@@ -300,6 +302,11 @@ void GPUBuffer::Destroy()
|
||||
addr = 0;
|
||||
}
|
||||
|
||||
void GPUBuffer::Name(const rdcstr &str)
|
||||
{
|
||||
NameUnwrappedVulkanObject(buf, str);
|
||||
}
|
||||
|
||||
void *GPUBuffer::Map(uint32_t *bindoffset, VkDeviceSize usedsize)
|
||||
{
|
||||
VkDeviceSize offset = bindoffset ? curoffset : 0;
|
||||
|
||||
@@ -214,6 +214,7 @@ struct GPUBuffer
|
||||
void Create(WrappedVulkan *driver, VkDevice dev, VkDeviceSize size, uint32_t ringSize,
|
||||
uint32_t flags);
|
||||
void Destroy();
|
||||
void Name(const rdcstr &str);
|
||||
|
||||
// return by const reference so we can pass in &UnwrappedBuffer() into bind calls
|
||||
const VkBuffer &UnwrappedBuffer() const { return buf; }
|
||||
|
||||
@@ -3260,6 +3260,7 @@ RDResult WrappedVulkan::ReadLogInitialisation(RDCFile *rdc, bool storeStructured
|
||||
|
||||
m_IndirectBuffer.Create(this, GetDev(), m_IndirectBufferSize * 2, 1,
|
||||
GPUBuffer::eGPUBufferGPULocal | GPUBuffer::eGPUBufferIndirectBuffer);
|
||||
m_IndirectBuffer.Name("m_IndirectBuffer");
|
||||
|
||||
m_IndirectCommandBuffer = GetNextCmd();
|
||||
|
||||
|
||||
@@ -829,6 +829,7 @@ VulkanDebugManager::VulkanDebugManager(WrappedVulkan *driver)
|
||||
pattern.append(GetDiscardPattern(DiscardType(i), fmt));
|
||||
|
||||
m_DiscardCB[i].Create(m_pDriver, m_Device, pattern.size(), 1, 0);
|
||||
m_DiscardCB[i].Name(StringFormat::Fmt("m_DiscardCB[%zu", i));
|
||||
|
||||
void *ptr = m_DiscardCB[i].Map();
|
||||
if(!ptr)
|
||||
@@ -862,6 +863,7 @@ VulkanDebugManager::VulkanDebugManager(WrappedVulkan *driver)
|
||||
if(RenderDoc::Inst().IsReplayApp())
|
||||
{
|
||||
m_ReadbackWindow.Create(driver, dev, STAGE_BUFFER_BYTE_SIZE, 1, GPUBuffer::eGPUBufferReadback);
|
||||
m_ReadbackWindow.Name("m_ReadbackWindow");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1321,6 +1323,8 @@ uint32_t VulkanReplay::PickVertex(uint32_t eventId, int32_t width, int32_t heigh
|
||||
m_VertexPick.IB.Create(m_pDriver, dev, m_VertexPick.IBSize, 1,
|
||||
GPUBuffer::eGPUBufferGPULocal | GPUBuffer::eGPUBufferSSBO);
|
||||
m_VertexPick.IBUpload.Create(m_pDriver, dev, m_VertexPick.IBSize, 1, 0);
|
||||
m_VertexPick.IB.Name("m_VertexPick.IB");
|
||||
m_VertexPick.IBUpload.Name("m_VertexPick.IBUpload");
|
||||
}
|
||||
|
||||
uint32_t *outidxs = (uint32_t *)m_VertexPick.IBUpload.Map();
|
||||
@@ -1425,6 +1429,7 @@ uint32_t VulkanReplay::PickVertex(uint32_t eventId, int32_t width, int32_t heigh
|
||||
|
||||
m_VertexPick.IB.Create(m_pDriver, dev, m_VertexPick.IBSize, 1,
|
||||
GPUBuffer::eGPUBufferGPULocal | GPUBuffer::eGPUBufferSSBO);
|
||||
m_VertexPick.IB.Name("m_VertexPick.IB");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1449,6 +1454,8 @@ uint32_t VulkanReplay::PickVertex(uint32_t eventId, int32_t width, int32_t heigh
|
||||
m_VertexPick.VB.Create(m_pDriver, dev, m_VertexPick.VBSize, 1,
|
||||
GPUBuffer::eGPUBufferGPULocal | GPUBuffer::eGPUBufferSSBO);
|
||||
m_VertexPick.VBUpload.Create(m_pDriver, dev, m_VertexPick.VBSize, 1, 0);
|
||||
m_VertexPick.VB.Name("m_VertexPick.VB");
|
||||
m_VertexPick.VBUpload.Name("m_VertexPick.VBUpload");
|
||||
}
|
||||
|
||||
byte *data = &oldData[0];
|
||||
@@ -2410,6 +2417,7 @@ void VulkanDebugManager::FillWithDiscardPattern(VkCommandBuffer cmd, DiscardType
|
||||
shape = {1, 1, 4};
|
||||
|
||||
stage.Create(m_pDriver, m_Device, pattern.size(), 1, 0);
|
||||
stage.Name(StringFormat::Fmt("m_DiscardStage[%s,%u]", ToStr(key.first).c_str(), key.second));
|
||||
|
||||
void *ptr = stage.Map();
|
||||
if(!ptr)
|
||||
@@ -3866,11 +3874,14 @@ void VulkanReplay::DestroyResources()
|
||||
m_General.Destroy(m_pDriver);
|
||||
m_TexRender.Destroy(m_pDriver);
|
||||
m_Overlay.Destroy(m_pDriver);
|
||||
m_ShaderDebugData.Destroy(m_pDriver);
|
||||
m_MeshRender.Destroy(m_pDriver);
|
||||
m_VertexPick.Destroy(m_pDriver);
|
||||
m_PixelPick.Destroy(m_pDriver);
|
||||
m_PixelHistory.Destroy(m_pDriver);
|
||||
m_Histogram.Destroy(m_pDriver);
|
||||
m_PostVS.Destroy(m_pDriver);
|
||||
m_PatchedShaderFeedback.Destroy(m_pDriver);
|
||||
|
||||
SAFE_DELETE(m_pAMDCounters);
|
||||
|
||||
@@ -3960,9 +3971,12 @@ void VulkanReplay::TextureRendering::Init(WrappedVulkan *driver, VkDescriptorPoo
|
||||
}
|
||||
|
||||
UBO.Create(driver, driver->GetDev(), 128, 10, 0);
|
||||
UBO.Name("TexDisplayUBO");
|
||||
|
||||
RDCCOMPILE_ASSERT(sizeof(TexDisplayUBOData) <= 128, "tex display size");
|
||||
|
||||
HeatmapUBO.Create(driver, driver->GetDev(), 512, 10, 0);
|
||||
HeatmapUBO.Name("HeatmapUBO");
|
||||
RDCCOMPILE_ASSERT(sizeof(HeatmapData) <= 512, "tex display size");
|
||||
|
||||
{
|
||||
@@ -4468,11 +4482,14 @@ void VulkanReplay::OverlayRendering::Init(WrappedVulkan *driver, VkDescriptorPoo
|
||||
CREATE_OBJECT(m_DepthCopyDescSet, descriptorPool, m_DepthCopyDescSetLayout);
|
||||
|
||||
m_CheckerUBO.Create(driver, driver->GetDev(), 128, 10, 0);
|
||||
m_CheckerUBO.Name("m_CheckerUBO");
|
||||
RDCCOMPILE_ASSERT(sizeof(CheckerboardUBOData) <= 128, "checkerboard UBO size");
|
||||
|
||||
m_DummyMeshletSSBO.Create(driver, driver->GetDev(), sizeof(Vec4f) * 2, 1,
|
||||
GPUBuffer::eGPUBufferSSBO);
|
||||
m_TriSizeUBO.Create(driver, driver->GetDev(), sizeof(Vec4f), 4096, 0);
|
||||
m_DummyMeshletSSBO.Name("m_DummyMeshletSSBO");
|
||||
m_TriSizeUBO.Name("m_TriSizeUBO");
|
||||
|
||||
ConciseGraphicsPipeline pipeInfo = {
|
||||
SRGBA8RP,
|
||||
@@ -4870,7 +4887,7 @@ VkPipeline VulkanReplay::OverlayRendering::CreateTempMultiviewQuadResolvePipe(Wr
|
||||
|
||||
void VulkanReplay::OverlayRendering::Destroy(WrappedVulkan *driver)
|
||||
{
|
||||
if(ImageMem == VK_NULL_HANDLE)
|
||||
if(m_PointSampler == VK_NULL_HANDLE)
|
||||
return;
|
||||
|
||||
driver->vkFreeMemory(driver->GetDev(), ImageMem, NULL);
|
||||
@@ -4906,6 +4923,7 @@ void VulkanReplay::OverlayRendering::Destroy(WrappedVulkan *driver)
|
||||
|
||||
m_CheckerUBO.Destroy();
|
||||
|
||||
m_DummyMeshletSSBO.Destroy();
|
||||
m_TriSizeUBO.Destroy();
|
||||
driver->vkDestroyDescriptorSetLayout(driver->GetDev(), m_TriSizeDescSetLayout, NULL);
|
||||
driver->vkDestroyPipelineLayout(driver->GetDev(), m_TriSizePipeLayout, NULL);
|
||||
@@ -4929,6 +4947,9 @@ void VulkanReplay::MeshRendering::Init(WrappedVulkan *driver, VkDescriptorPool d
|
||||
MeshletSSBO.Create(driver, driver->GetDev(), sizeof(uint32_t) * (4 + MAX_NUM_MESHLETS), 16,
|
||||
GPUBuffer::eGPUBufferSSBO);
|
||||
BBoxVB.Create(driver, driver->GetDev(), sizeof(Vec4f) * 128, 16, GPUBuffer::eGPUBufferVBuffer);
|
||||
UBO.Name("MeshUBO");
|
||||
MeshletSSBO.Name("MeshletSSBO");
|
||||
BBoxVB.Name("BBoxVB");
|
||||
|
||||
Vec4f TLN = Vec4f(-1.0f, 1.0f, 0.0f, 1.0f); // TopLeftNear, etc...
|
||||
Vec4f TRN = Vec4f(1.0f, 1.0f, 0.0f, 1.0f);
|
||||
@@ -4981,6 +5002,7 @@ void VulkanReplay::MeshRendering::Init(WrappedVulkan *driver, VkDescriptorPool d
|
||||
// doesn't need to be ring'd as it's immutable
|
||||
AxisFrustumVB.Create(driver, driver->GetDev(), sizeof(axisFrustum), 1,
|
||||
GPUBuffer::eGPUBufferVBuffer);
|
||||
AxisFrustumVB.Name("AxisFrustumVB");
|
||||
|
||||
Vec4f *axisData = (Vec4f *)AxisFrustumVB.Map();
|
||||
|
||||
@@ -5041,6 +5063,7 @@ void VulkanReplay::VertexPicking::Init(WrappedVulkan *driver, VkDescriptorPool d
|
||||
VBSize = 0;
|
||||
|
||||
UBO.Create(driver, driver->GetDev(), 128, 1, 0);
|
||||
UBO.Name("MeshPickUBO");
|
||||
RDCCOMPILE_ASSERT(sizeof(MeshPickUBOData) <= 128, "mesh pick UBO size");
|
||||
|
||||
const size_t meshPickResultSize = MaxMeshPicks * sizeof(FloatVector) + sizeof(uint32_t);
|
||||
@@ -5049,6 +5072,8 @@ void VulkanReplay::VertexPicking::Init(WrappedVulkan *driver, VkDescriptorPool d
|
||||
GPUBuffer::eGPUBufferGPULocal | GPUBuffer::eGPUBufferSSBO);
|
||||
ResultReadback.Create(driver, driver->GetDev(), meshPickResultSize, 1,
|
||||
GPUBuffer::eGPUBufferReadback);
|
||||
Result.Name("VertexPickResult");
|
||||
ResultReadback.Name("VertexPickResultReadback");
|
||||
|
||||
CREATE_OBJECT(Pipeline, Layout, shaderCache->GetBuiltinModule(BuiltinShader::MeshCS));
|
||||
|
||||
@@ -5198,6 +5223,7 @@ void VulkanReplay::PixelPicking::Init(WrappedVulkan *driver, VkDescriptorPool de
|
||||
// since we always sync for readback, doesn't need to be ring'd
|
||||
ReadbackBuffer.Create(driver, driver->GetDev(), sizeof(float) * 4, 1,
|
||||
GPUBuffer::eGPUBufferReadback);
|
||||
ReadbackBuffer.Name("PixelPickResultReadback");
|
||||
}
|
||||
|
||||
void VulkanReplay::PixelPicking::Destroy(WrappedVulkan *driver)
|
||||
@@ -5343,9 +5369,15 @@ void VulkanReplay::HistogramMinMax::Init(WrappedVulkan *driver, VkDescriptorPool
|
||||
GPUBuffer::eGPUBufferGPULocal | GPUBuffer::eGPUBufferSSBO);
|
||||
m_HistogramReadback.Create(driver, driver->GetDev(), sizeof(uint32_t) * HGRAM_NUM_BUCKETS, 1,
|
||||
GPUBuffer::eGPUBufferReadback);
|
||||
m_MinMaxTileResult.Name("m_MinMaxTileResult");
|
||||
m_MinMaxResult.Name("m_MinMaxResult");
|
||||
m_MinMaxReadback.Name("m_MinMaxReadback");
|
||||
m_HistogramBuf.Name("m_HistogramBuf");
|
||||
m_HistogramReadback.Name("m_HistogramReadback");
|
||||
|
||||
// don't need to ring this, as we hard-sync for readback anyway
|
||||
m_HistogramUBO.Create(driver, driver->GetDev(), sizeof(HistogramUBOData), 1, 0);
|
||||
m_HistogramUBO.Name("m_HistogramUBO");
|
||||
}
|
||||
|
||||
void VulkanReplay::HistogramMinMax::Destroy(WrappedVulkan *driver)
|
||||
@@ -5394,14 +5426,15 @@ void VulkanReplay::Feedback::ResizeFeedbackBuffer(WrappedVulkan *driver,
|
||||
|
||||
FeedbackBuffer.Destroy();
|
||||
FeedbackBuffer.Create(driver, dev, feedbackStorageSize, 1, flags);
|
||||
|
||||
NameUnwrappedVulkanObject(FeedbackBuffer.UnwrappedBuffer(),
|
||||
"m_BindlessFeedback.FeedbackBuffer");
|
||||
FeedbackBuffer.Name("m_BindlessFeedback.FeedbackBuffer");
|
||||
}
|
||||
}
|
||||
|
||||
void VulkanReplay::Feedback::Destroy(WrappedVulkan *driver)
|
||||
{
|
||||
if(PipeCache == VK_NULL_HANDLE)
|
||||
return;
|
||||
|
||||
FeedbackBuffer.Destroy();
|
||||
|
||||
driver->vkDestroyPipelineCache(driver->GetDev(), PipeCache, NULL);
|
||||
@@ -5566,16 +5599,20 @@ void ShaderDebugData::Init(WrappedVulkan *driver, VkDescriptorPool descriptorPoo
|
||||
ReadbackBuffer.Create(driver, driver->GetDev(), sizeof(Vec4f) * 4, 1,
|
||||
GPUBuffer::eGPUBufferReadback);
|
||||
ConstantsBuffer.Create(driver, driver->GetDev(), 1024, 1, 0);
|
||||
MathResult.Name("MathResult");
|
||||
ReadbackBuffer.Name("ShaderReadbackBuffer");
|
||||
ConstantsBuffer.Name("ShaderConstantsBuffer");
|
||||
}
|
||||
|
||||
void ShaderDebugData::Destroy(WrappedVulkan *driver)
|
||||
{
|
||||
if(PipeLayout == VK_NULL_HANDLE)
|
||||
return;
|
||||
|
||||
MathResult.Destroy();
|
||||
ConstantsBuffer.Destroy();
|
||||
ReadbackBuffer.Destroy();
|
||||
|
||||
for(size_t i = 0; i < ARRAY_COUNT(MathPipe); i++)
|
||||
driver->vkDestroyPipeline(driver->GetDev(), MathPipe[i], NULL);
|
||||
|
||||
driver->vkDestroyDescriptorSetLayout(driver->GetDev(), DescSetLayout, NULL);
|
||||
driver->vkDestroyPipelineLayout(driver->GetDev(), PipeLayout, NULL);
|
||||
|
||||
|
||||
@@ -578,6 +578,7 @@ void VulkanDebugManager::PatchLineStripIndexBuffer(const ActionDescription *acti
|
||||
|
||||
indexBuffer.Create(m_pDriver, m_Device, patchedIndices.size() * sizeof(uint32_t), 1,
|
||||
GPUBuffer::eGPUBufferIBuffer);
|
||||
indexBuffer.Name("PatchedStripIB");
|
||||
|
||||
void *ptr = indexBuffer.Map(0, patchedIndices.size() * sizeof(uint32_t));
|
||||
if(!ptr)
|
||||
|
||||
@@ -249,6 +249,7 @@ struct PixelHistoryShaderCache
|
||||
dummybuf.Create(vk, vk->GetDev(), 1024, 1,
|
||||
GPUBuffer::eGPUBufferGPULocal | GPUBuffer::eGPUBufferSSBO |
|
||||
GPUBuffer::eGPUBufferAddressable);
|
||||
dummybuf.Name("PixelHistoryDummy");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -258,11 +258,13 @@ VulkanTextRenderer::VulkanTextRenderer(WrappedVulkan *driver)
|
||||
|
||||
// make the ring conservatively large to handle many lines of text * several frames
|
||||
m_TextGeneralUBO.Create(driver, dev, 128, 100, 0);
|
||||
m_TextGeneralUBO.Name("m_TextGeneralUBO");
|
||||
RDCCOMPILE_ASSERT(sizeof(FontUBOData) <= 128, "font uniforms size");
|
||||
|
||||
// we only use a subset of the [MAX_SINGLE_LINE_LENGTH] array needed for each line, so this ring
|
||||
// can be smaller
|
||||
m_TextStringUBO.Create(driver, dev, 4096, 20, 0);
|
||||
m_TextGeneralUBO.Name("m_TextStringUBO");
|
||||
RDCCOMPILE_ASSERT(sizeof(StringUBOData) <= 4096, "font uniforms size");
|
||||
|
||||
pipeInfo.layout = m_TextPipeLayout;
|
||||
@@ -392,6 +394,7 @@ VulkanTextRenderer::VulkanTextRenderer(WrappedVulkan *driver)
|
||||
// create temporary memory and buffer to upload atlas
|
||||
// doesn't need to be ring'd, as it's static
|
||||
m_TextAtlasUpload.Create(driver, dev, 32768, 1, 0);
|
||||
m_TextAtlasUpload.Name("m_TextAtlasUpload");
|
||||
RDCCOMPILE_ASSERT(width * height <= 32768, "font uniform size");
|
||||
|
||||
byte *pData = (byte *)m_TextAtlasUpload.Map();
|
||||
@@ -404,6 +407,7 @@ VulkanTextRenderer::VulkanTextRenderer(WrappedVulkan *driver)
|
||||
|
||||
// doesn't need to be ring'd, as it's static
|
||||
m_TextGlyphUBO.Create(driver, dev, 4096, 1, 0);
|
||||
m_TextGlyphUBO.Name("m_TextGlyphUBO");
|
||||
RDCCOMPILE_ASSERT(sizeof(Vec4f) * 2 * (numChars + 1) < 4096, "font uniform size");
|
||||
|
||||
FontGlyphData *glyphData = (FontGlyphData *)m_TextGlyphUBO.Map();
|
||||
|
||||
@@ -3952,6 +3952,7 @@ QueryPoolInfo::QueryPoolInfo(WrappedVulkan *driver, VkDevice device,
|
||||
const VkQueryPoolCreateInfo *pCreateInfo)
|
||||
{
|
||||
m_Buffer.Create(driver, device, pCreateInfo->queryCount * 8, 1, GPUBuffer::eGPUBufferReadback);
|
||||
m_Buffer.Name(StringFormat::Fmt("QueryPoolInfoBuffer%u", pCreateInfo->queryCount));
|
||||
m_MappedMem = (byte *)m_Buffer.Map(0, m_Buffer.TotalSize());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user