feat: add tracy / various fixes

This commit is contained in:
2026-06-24 03:00:53 +02:00
parent 067caf5fe6
commit 9d3d14a54d
33 changed files with 1492 additions and 336 deletions
+75 -29
View File
@@ -5,6 +5,8 @@
#include "destrum/Util/GameState.h"
#include "spdlog/spdlog.h"
#include "tracy/TracyVulkan.hpp"
GameRenderer::GameRenderer(MeshCache& meshCache, MaterialCache& matCache): meshCache{meshCache}, materialCache{matCache} {
}
@@ -41,13 +43,20 @@ void GameRenderer::endDrawing() {
}
void GameRenderer::draw(VkCommandBuffer cmd, GfxDevice& gfxDevice, const Camera& camera, const SceneData& sceneData) {
ZoneScopedN("GameRenderer::draw");
TracyVkZone(gfxDevice.getTracyVkCtx(), cmd, "GameRenderer::draw");
for (const auto& dc : meshDrawCommands) {
if (!dc.skinnedMesh) {
continue;
{
TracyVkZone(gfxDevice.getTracyVkCtx(), cmd, "Skinning");
for (const auto& dc : meshDrawCommands) {
if (!dc.skinnedMesh) {
continue;
}
skinningPipeline->doSkinning(cmd, gfxDevice.getCurrentFrameIndex(), meshCache, dc);
}
skinningPipeline->doSkinning(cmd, gfxDevice.getCurrentFrameIndex(), meshCache, dc);
}
const auto gpuSceneData = GPUSceneData{
.view = sceneData.camera.GetViewMatrix(),
.proj = sceneData.camera.GetProjectionMatrix(),
@@ -59,40 +68,71 @@ void GameRenderer::draw(VkCommandBuffer cmd, GfxDevice& gfxDevice, const Camera&
.fogDensity = sceneData.fogDensity,
.materialsBuffer = materialCache.getMaterialDataBufferAddress(),
};
vkutil::bufferHostWriteToShaderReadBarrier(
cmd,
materialCache.getMaterialDataBuffer().buffer,
0,
VK_WHOLE_SIZE
);
sceneDataBuffer.uploadNewData(cmd, gfxDevice.getCurrentFrameIndex(), (void*)&gpuSceneData, sizeof(GPUSceneData));
{
TracyVkZone(gfxDevice.getTracyVkCtx(), cmd, "Material Buffer Barrier");
vkutil::bufferHostWriteToShaderReadBarrier(
cmd,
materialCache.getMaterialDataBuffer().buffer,
0,
VK_WHOLE_SIZE
);
}
{
TracyVkZone(gfxDevice.getTracyVkCtx(), cmd, "Upload Scene Data");
sceneDataBuffer.uploadNewData(
cmd,
gfxDevice.getCurrentFrameIndex(),
(void*)&gpuSceneData,
sizeof(GPUSceneData)
);
}
const auto& drawImage = gfxDevice.getImage(drawImageId);
const auto& depthImage = gfxDevice.getImage(depthImageId);
// vkutil::cmdBeginLabel(cmd, "Geometry");
vkutil::transitionImage(
{
TracyVkZone(gfxDevice.getTracyVkCtx(), cmd, "Transition Draw Image");
vkutil::transitionImage(
cmd,
drawImage.image,
VK_IMAGE_LAYOUT_UNDEFINED,
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
}
vkutil::transitionImage(
cmd,
depthImage.image,
VK_IMAGE_LAYOUT_UNDEFINED,
VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL);
{
TracyVkZone(gfxDevice.getTracyVkCtx(), cmd, "Transition Depth Image");
vkutil::transitionImage(
cmd,
depthImage.image,
VK_IMAGE_LAYOUT_UNDEFINED,
VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL);
}
const auto renderInfo = vkutil::createRenderingInfo({
.renderExtent = drawImage.getExtent2D(),
.colorImageView = drawImage.imageView,
.colorImageClearValue = glm::vec4{0.f, 0.f, 0.f, 1.f},
.depthImageView = depthImage.imageView,
.depthImageClearValue = 1.f,
});
.renderExtent = drawImage.getExtent2D(),
.colorImageView = drawImage.imageView,
.colorImageClearValue = glm::vec4{0.f, 0.f, 0.f, 1.f},
.depthImageView = depthImage.imageView,
.depthImageClearValue = 1.f,
});
vkCmdBeginRendering(cmd, &renderInfo.renderingInfo);
meshPipeline->draw(
{
TracyVkZone(gfxDevice.getTracyVkCtx(), cmd, "vkCmdBeginRendering");
vkCmdBeginRendering(cmd, &renderInfo.renderingInfo);
}
{
TracyVkZone(gfxDevice.getTracyVkCtx(), cmd, "MeshPipeline::draw");
meshPipeline->draw(
cmd,
drawImage.getExtent2D(),
gfxDevice,
@@ -102,14 +142,20 @@ void GameRenderer::draw(VkCommandBuffer cmd, GfxDevice& gfxDevice, const Camera&
sceneDataBuffer.getBuffer(),
meshDrawCommands,
sortedMeshDrawCommands);
}
skyboxPipeline->draw(cmd, gfxDevice, camera);
{
TracyVkZone(gfxDevice.getTracyVkCtx(), cmd, "SkyboxPipeline::draw");
skyboxPipeline->draw(cmd, gfxDevice, camera);
}
vkCmdEndRendering(cmd);
{
TracyVkZone(gfxDevice.getTracyVkCtx(), cmd, "vkCmdEndRendering");
vkCmdEndRendering(cmd);
}
// vkutil::cmdEndLabel(cmd);
}
void GameRenderer::cleanup(GfxDevice& gfxDevice) {