diff --git a/src/Engine/Graphics/Initializer.h b/src/Engine/Graphics/Initializer.h index c6bd454..202eeda 100644 --- a/src/Engine/Graphics/Initializer.h +++ b/src/Engine/Graphics/Initializer.h @@ -66,6 +66,7 @@ struct TextureCreateInfo uint32 samples = 1; Gfx::SeImageUsageFlags usage = Gfx::SE_IMAGE_USAGE_SAMPLED_BIT; Gfx::SeMemoryPropertyFlags memoryProps = Gfx::SE_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; + std::string name; }; struct SamplerCreateInfo { @@ -85,6 +86,7 @@ struct SamplerCreateInfo float maxLod = 0.0f; Gfx::SeBorderColor borderColor = Gfx::SE_BORDER_COLOR_FLOAT_OPAQUE_BLACK; uint32 unnormalizedCoordinates = 0; + std::string name; }; struct VertexBufferCreateInfo { @@ -92,22 +94,26 @@ struct VertexBufferCreateInfo // bytes per vertex uint32 vertexSize = 0; uint32 numVertices = 0; + std::string name; }; struct IndexBufferCreateInfo { DataSource sourceData = DataSource(); Gfx::SeIndexType indexType = Gfx::SeIndexType::SE_INDEX_TYPE_UINT16; + std::string name; }; struct UniformBufferCreateInfo { DataSource sourceData = DataSource(); uint8 dynamic = 0; + std::string name; }; struct ShaderBufferCreateInfo { DataSource sourceData = DataSource(); uint64 numElements = 1; uint8 dynamic = 0; + std::string name; }; struct ShaderCreateInfo { diff --git a/src/Engine/Graphics/RenderPass/LightCullingPass.cpp b/src/Engine/Graphics/RenderPass/LightCullingPass.cpp index ae092dc..f1cf9e1 100644 --- a/src/Engine/Graphics/RenderPass/LightCullingPass.cpp +++ b/src/Engine/Graphics/RenderPass/LightCullingPass.cpp @@ -49,7 +49,7 @@ void LightCullingPass::render() { oLightIndexCounter->pipelineBarrier( 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( 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); @@ -58,7 +58,7 @@ void LightCullingPass::render() Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT); tLightIndexCounter->pipelineBarrier( 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( 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); @@ -82,6 +82,7 @@ void LightCullingPass::render() computeCommand->bindDescriptor({ viewParamsSet, dispatchParamsSet, cullingDescriptorSet, lightEnv->getDescriptorSet() }); computeCommand->dispatch(dispatchParams.numThreadGroups.x, dispatchParams.numThreadGroups.y, dispatchParams.numThreadGroups.z); Array commands = {computeCommand}; + std::cout << "Execute" << std::endl; graphics->executeCommands(commands); //std::cout << "LightCulling render()" << std::endl; //co_return; @@ -156,8 +157,10 @@ void LightCullingPass::publishOutputs() }, .numElements = 1, .dynamic = true, + //.name = "oLightIndexCounter", }; oLightIndexCounter = graphics->createShaderBuffer(structInfo); + //structInfo.name = "tLightIndexCounter"; tLightIndexCounter = graphics->createShaderBuffer(structInfo); structInfo = { .sourceData = { @@ -169,8 +172,10 @@ void LightCullingPass::publishOutputs() .owner = Gfx::QueueType::COMPUTE }, .dynamic = false, + //.name = "oLightIndexList", }; oLightIndexList = graphics->createShaderBuffer(structInfo); + //structInfo.name = "tLightIndexList"; tLightIndexList = graphics->createShaderBuffer(structInfo); resources->registerBufferOutput("LIGHTCULLING_OLIGHTLIST", oLightIndexList); resources->registerBufferOutput("LIGHTCULLING_TLIGHTLIST", tLightIndexList); diff --git a/src/Engine/Graphics/Vulkan/Buffer.cpp b/src/Engine/Graphics/Vulkan/Buffer.cpp index 24e4a87..222d2e2 100644 --- a/src/Engine/Graphics/Vulkan/Buffer.cpp +++ b/src/Engine/Graphics/Vulkan/Buffer.cpp @@ -16,8 +16,13 @@ struct PendingBuffer static Map pendingBuffers; -Buffer::Buffer(PGraphics graphics, uint64 size, VkBufferUsageFlags usage, Gfx::QueueType &queueType, bool dynamic) - : graphics(graphics), currentBuffer(0), size(size), owner(queueType) +Buffer::Buffer(PGraphics graphics, + uint64 size, + VkBufferUsageFlags usage, + Gfx::QueueType &queueType, + bool dynamic, + std::string name) + : graphics(graphics), currentBuffer(0), size(size), owner(queueType), name(name) { 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); 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) - : 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) { @@ -310,7 +327,7 @@ VkAccessFlags UniformBuffer::getDestAccessMask() } 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) { @@ -367,7 +384,7 @@ VkAccessFlags ShaderBuffer::getDestAccessMask() } 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) { @@ -428,7 +445,7 @@ VkAccessFlags VertexBuffer::getDestAccessMask() } 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) { diff --git a/src/Engine/Graphics/Vulkan/Buffer.h b/src/Engine/Graphics/Vulkan/Buffer.h index 73fdf23..a30b1f7 100644 --- a/src/Engine/Graphics/Vulkan/Buffer.h +++ b/src/Engine/Graphics/Vulkan/Buffer.h @@ -9,7 +9,12 @@ namespace Vulkan class Buffer { 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(); VkBuffer getHandle() const { @@ -41,6 +46,7 @@ protected: Gfx::QueueType& owner; BufferAllocation buffers[Gfx::numFramesBuffered]; uint32 numBuffers; + std::string name; void executeOwnershipBarrier(Gfx::QueueType newOwner); void executePipelineBarrier(VkAccessFlags srcAccess, VkPipelineStageFlags srcStage, diff --git a/src/Engine/Graphics/Vulkan/Debug.cpp b/src/Engine/Graphics/Vulkan/Debug.cpp index df313fc..7a2158b 100644 --- a/src/Engine/Graphics/Vulkan/Debug.cpp +++ b/src/Engine/Graphics/Vulkan/Debug.cpp @@ -10,7 +10,7 @@ VkBool32 Seele::Vulkan::debugCallback( void* pUserData) { 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; } diff --git a/src/Engine/Graphics/Vulkan/Graphics.cpp b/src/Engine/Graphics/Vulkan/Graphics.cpp index d0045f6..1f57753 100644 --- a/src/Engine/Graphics/Vulkan/Graphics.cpp +++ b/src/Engine/Graphics/Vulkan/Graphics.cpp @@ -293,6 +293,12 @@ void Graphics::vkCmdDrawMeshTasksEXT(VkCommandBuffer handle, uint32 groupX, uint cmdDrawMeshTasks(handle, groupX, groupY, groupZ); } +void Graphics::vkDebugMarkerSetObjectNameEXT(VkDebugMarkerObjectNameInfoEXT* info) +{ + VK_CHECK(cmdDebugMarkerSetObjectName(handle, info)); +} + + PCommandPool Graphics::getQueueCommands(Gfx::QueueType queueType) { switch (queueType) @@ -422,6 +428,7 @@ void Graphics::setupDebugCallback() .pUserData = nullptr, }; VK_CHECK(CreateDebugUtilsMessengerEXT(instance, &createInfo, nullptr, &callback)); + cmdDebugMarkerSetObjectName = (PFN_vkDebugMarkerSetObjectNameEXT)vkGetInstanceProcAddr(instance, "vkDebugMarkerSetObjectNameEXT"); } void Graphics::pickPhysicalDevice() diff --git a/src/Engine/Graphics/Vulkan/Graphics.h b/src/Engine/Graphics/Vulkan/Graphics.h index 0299859..ca19584 100644 --- a/src/Engine/Graphics/Vulkan/Graphics.h +++ b/src/Engine/Graphics/Vulkan/Graphics.h @@ -71,9 +71,11 @@ public: virtual void resolveTexture(Gfx::PTexture source, Gfx::PTexture destination) override; void vkCmdDrawMeshTasksEXT(VkCommandBuffer handle, uint32 groupX, uint32 groupY, uint32 groupZ); + void vkDebugMarkerSetObjectNameEXT(VkDebugMarkerObjectNameInfoEXT* info); protected: PFN_vkCmdDrawMeshTasksEXT cmdDrawMeshTasks; + PFN_vkDebugMarkerSetObjectNameEXT cmdDebugMarkerSetObjectName; Array getRequiredExtensions(); void initInstance(GraphicsInitializer initInfo); void setupDebugCallback();