Archived
1
Fork 0

Add debug name function, fix sobel image causing artifacts

This commit is contained in:
Joshua Goins 2022-02-28 22:21:50 -05:00
parent 79d7258d84
commit 7f48bf822d
3 changed files with 66 additions and 18 deletions

View file

@ -1,6 +1,7 @@
#pragma once
#include <vulkan/vulkan.h>
#include <string_view>
#include "worldpass.h"
#include "postpass.h"
@ -236,3 +237,5 @@ private:
SMAAPass* smaaPass_ = nullptr;
DebugPass* debugPass_ = nullptr;
};
VkResult name_object(VkDevice device, VkObjectType type, uint64_t object, std::string_view name);

View file

@ -35,6 +35,7 @@ void DebugPass::render(VkCommandBuffer commandBuffer, RenderCollection& collecti
vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_);
if(extraInfo != nullptr) {
for (auto mesh: collection.meshes) {
bool shouldRender = false;
for (int i = 0; i < extraInfo->numSelectedEntities; i++) {
@ -44,11 +45,15 @@ void DebugPass::render(VkCommandBuffer commandBuffer, RenderCollection& collecti
if (shouldRender) {
glm::mat4 mvp;
mvp = glm::perspective(glm::radians(collection.camera.camera->fov), (float)target->extent.width / target->extent.height, collection.camera.camera->near, collection.camera.camera->far);
mvp *= glm::lookAt(collection.camera.transform->position, collection.camera.camera->target, glm::vec3(0, -1, 0));
mvp = glm::perspective(glm::radians(collection.camera.camera->fov),
(float) target->extent.width / target->extent.height,
collection.camera.camera->near, collection.camera.camera->far);
mvp *= glm::lookAt(collection.camera.transform->position, collection.camera.camera->target,
glm::vec3(0, -1, 0));
mvp = glm::translate(mvp, mesh.transform->position);
vkCmdPushConstants(commandBuffer, pipelineLayout_, VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(glm::mat4), &mvp);
vkCmdPushConstants(commandBuffer, pipelineLayout_, VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(glm::mat4),
&mvp);
const VkDeviceSize offsets[] = {0};
vkCmdBindVertexBuffers(commandBuffer, 0, 1, &mesh.mesh->mesh->vertexBuffer, offsets);
@ -57,6 +62,7 @@ void DebugPass::render(VkCommandBuffer commandBuffer, RenderCollection& collecti
vkCmdDrawIndexed(commandBuffer, mesh.mesh->mesh->indices.size(), 1, 0, 0, 0);
}
}
}
vkCmdEndRenderPass(commandBuffer);
}

View file

@ -16,6 +16,26 @@
#include "ecs.h"
#include "world.h"
VkResult name_object(VkDevice device, VkObjectType type, uint64_t object,
std::string_view name) {
if (object == 0x0) {
return VK_ERROR_DEVICE_LOST;
}
VkDebugUtilsObjectNameInfoEXT info = {};
info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
info.objectType = type;
info.pObjectName = name.data();
info.objectHandle = object;
auto func = (PFN_vkSetDebugUtilsObjectNameEXT) vkGetDeviceProcAddr(
device, "vkSetDebugUtilsObjectNameEXT");
if (func != nullptr)
return func(device, &info);
else
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
Renderer::Renderer(GraphicsConfig config) : config_(config) {
createInstance();
#ifdef DEBUG
@ -157,7 +177,6 @@ void Renderer::render(World& world, RenderTarget* target, RenderExtraInfo* extra
vkCmdEndRenderPass(commandBuffer);
if(extraInfo)
debugPass_->render(commandBuffer, collection, extraInfo, target);
dofPass_->render(commandBuffer, *collection.camera.camera, target);
@ -376,6 +395,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
vkCreateImage(device_, &imageCreateInfo, nullptr, &target->offscreenColorImages[i]);
name_object(device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)target->offscreenColorImages[i], "offscreen image view");
VkMemoryRequirements memoryRequirements = {};
vkGetImageMemoryRequirements(device_, target->offscreenColorImages[i], &memoryRequirements);
@ -419,6 +440,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
vkCreateImage(device_, &imageCreateInfo, nullptr, &target->offscreenDepthImages[i]);
name_object(device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)target->offscreenDepthImages[i], "offscreen depth view");
VkMemoryRequirements memoryRequirements = {};
vkGetImageMemoryRequirements(device_, target->offscreenDepthImages[i], &memoryRequirements);
@ -481,6 +504,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
vkCreateImage(device_, &imageCreateInfo, nullptr, &target->sobelImages[i]);
name_object(device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)target->sobelImages[i], "sobel image");
VkMemoryRequirements memoryRequirements = {};
vkGetImageMemoryRequirements(device_, target->sobelImages[i], &memoryRequirements);
@ -538,6 +563,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
vkCreateImage(device_, &imageCreateInfo, nullptr, &target->nearFieldImages[i]);
name_object(device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)target->nearFieldImages[i], "near field image");
VkMemoryRequirements memoryRequirements = {};
vkGetImageMemoryRequirements(device_, target->nearFieldImages[i], &memoryRequirements);
@ -595,6 +622,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
vkCreateImage(device_, &imageCreateInfo, nullptr, &target->farFieldImages[i]);
name_object(device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)target->farFieldImages[i], "far field image");
VkMemoryRequirements memoryRequirements = {};
vkGetImageMemoryRequirements(device_, target->farFieldImages[i], &memoryRequirements);
@ -652,6 +681,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
vkCreateImage(device_, &imageCreateInfo, nullptr, &target->edgeImages[i]);
name_object(device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)target->edgeImages[i], "edge image");
VkMemoryRequirements memoryRequirements = {};
vkGetImageMemoryRequirements(device_, target->edgeImages[i], &memoryRequirements);
@ -709,6 +740,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
vkCreateImage(device_, &imageCreateInfo, nullptr, &target->blendImages[i]);
name_object(device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)target->blendImages[i], "blend image");
VkMemoryRequirements memoryRequirements = {};
vkGetImageMemoryRequirements(device_, target->blendImages[i], &memoryRequirements);
@ -953,6 +986,8 @@ void Renderer::takeScreenshot(const char* path, RenderTarget* target) {
VkImage image = nullptr;
vkCreateImage(device_, &imageCreateInfo, nullptr, &image);
name_object(device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)image, "screenshot image");
VkMemoryRequirements memoryRequirements = {};
vkGetImageMemoryRequirements(device_, image, &memoryRequirements);
@ -1377,6 +1412,8 @@ void Renderer::fillMaterialBuffers(MaterialAsset* material) {
vkCreateImage(device_, &imageCreateInfo, nullptr, &material->albedoImage);
name_object(device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)material->albedoImage, "albedo image");
VkMemoryRequirements memRequirements;
vkGetImageMemoryRequirements(device_, material->albedoImage, &memRequirements);
@ -1689,6 +1726,8 @@ void Renderer::createEmptyMaterialSet() {
vkCreateImage(device_, &imageCreateInfo, nullptr, &emptyImage_);
name_object(device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)emptyImage_, "empty image");
VkMemoryRequirements memRequirements;
vkGetImageMemoryRequirements(device_, emptyImage_, &memRequirements);