Adding object debug naming

This commit is contained in:
Dynamitos
2024-01-31 14:05:36 +01:00
parent 567c3014b1
commit d903689435
7 changed files with 53 additions and 10 deletions
+6
View File
@@ -66,6 +66,7 @@ struct TextureCreateInfo
uint32 samples = 1; uint32 samples = 1;
Gfx::SeImageUsageFlags usage = Gfx::SE_IMAGE_USAGE_SAMPLED_BIT; Gfx::SeImageUsageFlags usage = Gfx::SE_IMAGE_USAGE_SAMPLED_BIT;
Gfx::SeMemoryPropertyFlags memoryProps = Gfx::SE_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; Gfx::SeMemoryPropertyFlags memoryProps = Gfx::SE_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
std::string name;
}; };
struct SamplerCreateInfo struct SamplerCreateInfo
{ {
@@ -85,6 +86,7 @@ struct SamplerCreateInfo
float maxLod = 0.0f; float maxLod = 0.0f;
Gfx::SeBorderColor borderColor = Gfx::SE_BORDER_COLOR_FLOAT_OPAQUE_BLACK; Gfx::SeBorderColor borderColor = Gfx::SE_BORDER_COLOR_FLOAT_OPAQUE_BLACK;
uint32 unnormalizedCoordinates = 0; uint32 unnormalizedCoordinates = 0;
std::string name;
}; };
struct VertexBufferCreateInfo struct VertexBufferCreateInfo
{ {
@@ -92,22 +94,26 @@ struct VertexBufferCreateInfo
// bytes per vertex // bytes per vertex
uint32 vertexSize = 0; uint32 vertexSize = 0;
uint32 numVertices = 0; uint32 numVertices = 0;
std::string name;
}; };
struct IndexBufferCreateInfo struct IndexBufferCreateInfo
{ {
DataSource sourceData = DataSource(); DataSource sourceData = DataSource();
Gfx::SeIndexType indexType = Gfx::SeIndexType::SE_INDEX_TYPE_UINT16; Gfx::SeIndexType indexType = Gfx::SeIndexType::SE_INDEX_TYPE_UINT16;
std::string name;
}; };
struct UniformBufferCreateInfo struct UniformBufferCreateInfo
{ {
DataSource sourceData = DataSource(); DataSource sourceData = DataSource();
uint8 dynamic = 0; uint8 dynamic = 0;
std::string name;
}; };
struct ShaderBufferCreateInfo struct ShaderBufferCreateInfo
{ {
DataSource sourceData = DataSource(); DataSource sourceData = DataSource();
uint64 numElements = 1; uint64 numElements = 1;
uint8 dynamic = 0; uint8 dynamic = 0;
std::string name;
}; };
struct ShaderCreateInfo struct ShaderCreateInfo
{ {
@@ -49,7 +49,7 @@ void LightCullingPass::render()
{ {
oLightIndexCounter->pipelineBarrier( oLightIndexCounter->pipelineBarrier(
Gfx::SE_ACCESS_MEMORY_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT, Gfx::SE_ACCESS_MEMORY_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT,
Gfx::SE_ACCESS_MEMORY_WRITE_BIT | Gfx::SE_ACCESS_MEMORY_READ_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT); Gfx::SE_ACCESS_MEMORY_READ_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT);
oLightIndexList->pipelineBarrier( oLightIndexList->pipelineBarrier(
Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT); Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT);
@@ -58,7 +58,7 @@ void LightCullingPass::render()
Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT); Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT);
tLightIndexCounter->pipelineBarrier( tLightIndexCounter->pipelineBarrier(
Gfx::SE_ACCESS_MEMORY_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT, Gfx::SE_ACCESS_MEMORY_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT,
Gfx::SE_ACCESS_MEMORY_WRITE_BIT | Gfx::SE_ACCESS_MEMORY_READ_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT); Gfx::SE_ACCESS_MEMORY_READ_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT);
tLightIndexList->pipelineBarrier( tLightIndexList->pipelineBarrier(
Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT); Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT);
@@ -82,6 +82,7 @@ void LightCullingPass::render()
computeCommand->bindDescriptor({ viewParamsSet, dispatchParamsSet, cullingDescriptorSet, lightEnv->getDescriptorSet() }); computeCommand->bindDescriptor({ viewParamsSet, dispatchParamsSet, cullingDescriptorSet, lightEnv->getDescriptorSet() });
computeCommand->dispatch(dispatchParams.numThreadGroups.x, dispatchParams.numThreadGroups.y, dispatchParams.numThreadGroups.z); computeCommand->dispatch(dispatchParams.numThreadGroups.x, dispatchParams.numThreadGroups.y, dispatchParams.numThreadGroups.z);
Array<Gfx::PComputeCommand> commands = {computeCommand}; Array<Gfx::PComputeCommand> commands = {computeCommand};
std::cout << "Execute" << std::endl;
graphics->executeCommands(commands); graphics->executeCommands(commands);
//std::cout << "LightCulling render()" << std::endl; //std::cout << "LightCulling render()" << std::endl;
//co_return; //co_return;
@@ -156,8 +157,10 @@ void LightCullingPass::publishOutputs()
}, },
.numElements = 1, .numElements = 1,
.dynamic = true, .dynamic = true,
//.name = "oLightIndexCounter",
}; };
oLightIndexCounter = graphics->createShaderBuffer(structInfo); oLightIndexCounter = graphics->createShaderBuffer(structInfo);
//structInfo.name = "tLightIndexCounter";
tLightIndexCounter = graphics->createShaderBuffer(structInfo); tLightIndexCounter = graphics->createShaderBuffer(structInfo);
structInfo = { structInfo = {
.sourceData = { .sourceData = {
@@ -169,8 +172,10 @@ void LightCullingPass::publishOutputs()
.owner = Gfx::QueueType::COMPUTE .owner = Gfx::QueueType::COMPUTE
}, },
.dynamic = false, .dynamic = false,
//.name = "oLightIndexList",
}; };
oLightIndexList = graphics->createShaderBuffer(structInfo); oLightIndexList = graphics->createShaderBuffer(structInfo);
//structInfo.name = "tLightIndexList";
tLightIndexList = graphics->createShaderBuffer(structInfo); tLightIndexList = graphics->createShaderBuffer(structInfo);
resources->registerBufferOutput("LIGHTCULLING_OLIGHTLIST", oLightIndexList); resources->registerBufferOutput("LIGHTCULLING_OLIGHTLIST", oLightIndexList);
resources->registerBufferOutput("LIGHTCULLING_TLIGHTLIST", tLightIndexList); resources->registerBufferOutput("LIGHTCULLING_TLIGHTLIST", tLightIndexList);
+23 -6
View File
@@ -16,8 +16,13 @@ struct PendingBuffer
static Map<Vulkan::Buffer *, PendingBuffer> pendingBuffers; static Map<Vulkan::Buffer *, PendingBuffer> pendingBuffers;
Buffer::Buffer(PGraphics graphics, uint64 size, VkBufferUsageFlags usage, Gfx::QueueType &queueType, bool dynamic) Buffer::Buffer(PGraphics graphics,
: graphics(graphics), currentBuffer(0), size(size), owner(queueType) uint64 size,
VkBufferUsageFlags usage,
Gfx::QueueType &queueType,
bool dynamic,
std::string name)
: graphics(graphics), currentBuffer(0), size(size), owner(queueType), name(name)
{ {
if (dynamic) if (dynamic)
{ {
@@ -42,6 +47,17 @@ Buffer::Buffer(PGraphics graphics, uint64 size, VkBufferUsageFlags usage, Gfx::Q
{ {
vmaCreateBuffer(graphics->getAllocator(), &info, &allocInfo, &buffers[i].buffer, &buffers[i].allocation, &buffers[i].info); vmaCreateBuffer(graphics->getAllocator(), &info, &allocInfo, &buffers[i].buffer, &buffers[i].allocation, &buffers[i].info);
vmaGetAllocationMemoryProperties(graphics->getAllocator(), buffers[i].allocation, &buffers[i].properties); vmaGetAllocationMemoryProperties(graphics->getAllocator(), buffers[i].allocation, &buffers[i].properties);
if (!name.empty())
{
VkDebugMarkerObjectNameInfoEXT nameInfo = {
.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT,
.pNext = nullptr,
.objectType = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT,
.object = (uint64)buffers[i].buffer,
.pObjectName = this->name.c_str()
};
graphics->vkDebugMarkerSetObjectNameEXT(&nameInfo);
}
} }
} }
@@ -251,7 +267,8 @@ void Buffer::unmap()
} }
UniformBuffer::UniformBuffer(PGraphics graphics, const UniformBufferCreateInfo &createInfo) UniformBuffer::UniformBuffer(PGraphics graphics, const UniformBufferCreateInfo &createInfo)
: Gfx::UniformBuffer(graphics->getFamilyMapping(), createInfo.sourceData), Vulkan::Buffer(graphics, createInfo.sourceData.size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, currentOwner, createInfo.dynamic) : Gfx::UniformBuffer(graphics->getFamilyMapping(), createInfo.sourceData),
Vulkan::Buffer(graphics, createInfo.sourceData.size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, currentOwner, createInfo.dynamic, createInfo.name)
{ {
if (createInfo.sourceData.data != nullptr) if (createInfo.sourceData.data != nullptr)
{ {
@@ -310,7 +327,7 @@ VkAccessFlags UniformBuffer::getDestAccessMask()
} }
ShaderBuffer::ShaderBuffer(PGraphics graphics, const ShaderBufferCreateInfo &sourceData) ShaderBuffer::ShaderBuffer(PGraphics graphics, const ShaderBufferCreateInfo &sourceData)
: Gfx::ShaderBuffer(graphics->getFamilyMapping(), sourceData.numElements, sourceData.sourceData), Vulkan::Buffer(graphics, sourceData.sourceData.size, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, currentOwner, sourceData.dynamic) : Gfx::ShaderBuffer(graphics->getFamilyMapping(), sourceData.numElements, sourceData.sourceData), Vulkan::Buffer(graphics, sourceData.sourceData.size, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, currentOwner, sourceData.dynamic, sourceData.name)
{ {
if (sourceData.sourceData.data != nullptr) if (sourceData.sourceData.data != nullptr)
{ {
@@ -367,7 +384,7 @@ VkAccessFlags ShaderBuffer::getDestAccessMask()
} }
VertexBuffer::VertexBuffer(PGraphics graphics, const VertexBufferCreateInfo &sourceData) VertexBuffer::VertexBuffer(PGraphics graphics, const VertexBufferCreateInfo &sourceData)
: Gfx::VertexBuffer(graphics->getFamilyMapping(), sourceData.numVertices, sourceData.vertexSize, sourceData.sourceData.owner), Vulkan::Buffer(graphics, sourceData.sourceData.size, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, currentOwner) : Gfx::VertexBuffer(graphics->getFamilyMapping(), sourceData.numVertices, sourceData.vertexSize, sourceData.sourceData.owner), Vulkan::Buffer(graphics, sourceData.sourceData.size, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, currentOwner, false, sourceData.name)
{ {
if (sourceData.sourceData.data != nullptr) if (sourceData.sourceData.data != nullptr)
{ {
@@ -428,7 +445,7 @@ VkAccessFlags VertexBuffer::getDestAccessMask()
} }
IndexBuffer::IndexBuffer(PGraphics graphics, const IndexBufferCreateInfo &sourceData) IndexBuffer::IndexBuffer(PGraphics graphics, const IndexBufferCreateInfo &sourceData)
: Gfx::IndexBuffer(graphics->getFamilyMapping(), sourceData.sourceData.size, sourceData.indexType, sourceData.sourceData.owner), Vulkan::Buffer(graphics, sourceData.sourceData.size, VK_BUFFER_USAGE_INDEX_BUFFER_BIT, currentOwner) : Gfx::IndexBuffer(graphics->getFamilyMapping(), sourceData.sourceData.size, sourceData.indexType, sourceData.sourceData.owner), Vulkan::Buffer(graphics, sourceData.sourceData.size, VK_BUFFER_USAGE_INDEX_BUFFER_BIT, currentOwner, false, sourceData.name)
{ {
if (sourceData.sourceData.data != nullptr) if (sourceData.sourceData.data != nullptr)
{ {
+7 -1
View File
@@ -9,7 +9,12 @@ namespace Vulkan
class Buffer class Buffer
{ {
public: public:
Buffer(PGraphics graphics, uint64 size, VkBufferUsageFlags usage, Gfx::QueueType& queueType, bool dynamic = false); Buffer(PGraphics graphics,
uint64 size,
VkBufferUsageFlags usage,
Gfx::QueueType& queueType,
bool dynamic,
std::string name);
virtual ~Buffer(); virtual ~Buffer();
VkBuffer getHandle() const VkBuffer getHandle() const
{ {
@@ -41,6 +46,7 @@ protected:
Gfx::QueueType& owner; Gfx::QueueType& owner;
BufferAllocation buffers[Gfx::numFramesBuffered]; BufferAllocation buffers[Gfx::numFramesBuffered];
uint32 numBuffers; uint32 numBuffers;
std::string name;
void executeOwnershipBarrier(Gfx::QueueType newOwner); void executeOwnershipBarrier(Gfx::QueueType newOwner);
void executePipelineBarrier(VkAccessFlags srcAccess, VkPipelineStageFlags srcStage, void executePipelineBarrier(VkAccessFlags srcAccess, VkPipelineStageFlags srcStage,
+1 -1
View File
@@ -10,7 +10,7 @@ VkBool32 Seele::Vulkan::debugCallback(
void* pUserData) void* pUserData)
{ {
std::cerr << pCallbackData->pMessage << std::endl; std::cerr << pCallbackData->pMessage << std::endl;
if(messageSeverity == VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) if(messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT)
{ {
return VK_FALSE; return VK_FALSE;
} }
+7
View File
@@ -293,6 +293,12 @@ void Graphics::vkCmdDrawMeshTasksEXT(VkCommandBuffer handle, uint32 groupX, uint
cmdDrawMeshTasks(handle, groupX, groupY, groupZ); cmdDrawMeshTasks(handle, groupX, groupY, groupZ);
} }
void Graphics::vkDebugMarkerSetObjectNameEXT(VkDebugMarkerObjectNameInfoEXT* info)
{
VK_CHECK(cmdDebugMarkerSetObjectName(handle, info));
}
PCommandPool Graphics::getQueueCommands(Gfx::QueueType queueType) PCommandPool Graphics::getQueueCommands(Gfx::QueueType queueType)
{ {
switch (queueType) switch (queueType)
@@ -422,6 +428,7 @@ void Graphics::setupDebugCallback()
.pUserData = nullptr, .pUserData = nullptr,
}; };
VK_CHECK(CreateDebugUtilsMessengerEXT(instance, &createInfo, nullptr, &callback)); VK_CHECK(CreateDebugUtilsMessengerEXT(instance, &createInfo, nullptr, &callback));
cmdDebugMarkerSetObjectName = (PFN_vkDebugMarkerSetObjectNameEXT)vkGetInstanceProcAddr(instance, "vkDebugMarkerSetObjectNameEXT");
} }
void Graphics::pickPhysicalDevice() void Graphics::pickPhysicalDevice()
+2
View File
@@ -71,9 +71,11 @@ public:
virtual void resolveTexture(Gfx::PTexture source, Gfx::PTexture destination) override; virtual void resolveTexture(Gfx::PTexture source, Gfx::PTexture destination) override;
void vkCmdDrawMeshTasksEXT(VkCommandBuffer handle, uint32 groupX, uint32 groupY, uint32 groupZ); void vkCmdDrawMeshTasksEXT(VkCommandBuffer handle, uint32 groupX, uint32 groupY, uint32 groupZ);
void vkDebugMarkerSetObjectNameEXT(VkDebugMarkerObjectNameInfoEXT* info);
protected: protected:
PFN_vkCmdDrawMeshTasksEXT cmdDrawMeshTasks; PFN_vkCmdDrawMeshTasksEXT cmdDrawMeshTasks;
PFN_vkDebugMarkerSetObjectNameEXT cmdDebugMarkerSetObjectName;
Array<const char *> getRequiredExtensions(); Array<const char *> getRequiredExtensions();
void initInstance(GraphicsInitializer initInfo); void initInstance(GraphicsInitializer initInfo);
void setupDebugCallback(); void setupDebugCallback();