Add debug name function, fix sobel image causing artifacts
This commit is contained in:
parent
79d7258d84
commit
7f48bf822d
3 changed files with 66 additions and 18 deletions
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Reference in a new issue