feat: add tracy / various fixes
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user