From e1a19e9d07a9f299b45fc05c6d85330702146e02 Mon Sep 17 00:00:00 2001 From: Alexander Gauggel <agauggel@uni-koblenz.de> Date: Fri, 4 Jun 2021 17:19:10 +0200 Subject: [PATCH] [#66] Remove unnecessary width/height from mesh drawcall --- include/vkcv/Core.hpp | 2 -- projects/cmd_sync_test/src/main.cpp | 2 -- src/vkcv/Core.cpp | 21 +++++++++++++++++++-- src/vkcv/ImageManager.cpp | 9 +++++++++ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/include/vkcv/Core.hpp b/include/vkcv/Core.hpp index f3048748..f7f725ea 100644 --- a/include/vkcv/Core.hpp +++ b/include/vkcv/Core.hpp @@ -230,8 +230,6 @@ namespace vkcv void renderMesh( const PassHandle renderpassHandle, const PipelineHandle pipelineHandle, - const uint32_t width, - const uint32_t height, const size_t pushConstantSize, const void* pushConstantData, const std::vector<VertexBufferBinding> &vertexBufferBindings, diff --git a/projects/cmd_sync_test/src/main.cpp b/projects/cmd_sync_test/src/main.cpp index 3f6e2c3f..b70394d9 100644 --- a/projects/cmd_sync_test/src/main.cpp +++ b/projects/cmd_sync_test/src/main.cpp @@ -162,8 +162,6 @@ int main(int argc, const char** argv) { core.renderMesh( trianglePass, trianglePipeline, - windowWidth, - windowHeight, sizeof(mvp), &mvp, vertexBufferBindings, diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp index c9a43edb..b320f5db 100644 --- a/src/vkcv/Core.cpp +++ b/src/vkcv/Core.cpp @@ -176,8 +176,6 @@ namespace vkcv void Core::renderMesh( const PassHandle renderpassHandle, const PipelineHandle pipelineHandle, - const uint32_t width, - const uint32_t height, const size_t pushConstantSize, const void *pushConstantData, const std::vector<VertexBufferBinding>& vertexBufferBindings, @@ -191,6 +189,25 @@ namespace vkcv return; } + uint32_t width; + uint32_t height; + if (renderTargets.size() > 0) { + const vkcv::ImageHandle firstImage = renderTargets[0]; + if (firstImage.isSwapchainImage()) { + width = m_window.getWidth(); + height = m_window.getHeight(); + } + else { + width = m_ImageManager->getImageWidth(firstImage); + height = m_ImageManager->getImageHeight(firstImage); + } + } + else { + width = 1; + height = 1; + } + // TODO: validate that width/height match for all attachments + const vk::RenderPass renderpass = m_PassManager->getVkPass(renderpassHandle); const PassConfig passConfig = m_PassManager->getPassConfig(renderpassHandle); diff --git a/src/vkcv/ImageManager.cpp b/src/vkcv/ImageManager.cpp index 4b46b5fc..a3ca22b1 100644 --- a/src/vkcv/ImageManager.cpp +++ b/src/vkcv/ImageManager.cpp @@ -178,6 +178,7 @@ namespace vkcv { const uint64_t id = handle.getId(); if (id >= m_images.size()) { + std::cerr << "Error: ImageManager::getVulkanImage invalid handle" << std::endl; return nullptr; } @@ -190,6 +191,7 @@ namespace vkcv { const uint64_t id = handle.getId(); if (id >= m_images.size()) { + std::cerr << "Error: ImageManager::getVulkanDeviceMemory invalid handle" << std::endl; return nullptr; } @@ -202,6 +204,7 @@ namespace vkcv { const uint64_t id = handle.getId(); if (id >= m_images.size()) { + std::cerr << "Error: ImageManager::getVulkanImageView invalid handle" << std::endl; return nullptr; } @@ -214,6 +217,7 @@ namespace vkcv { const uint64_t id = handle.getId(); if (id >= m_images.size()) { + std::cerr << "Error: ImageManager::switchImageLayout invalid handle" << std::endl; return; } @@ -295,6 +299,7 @@ namespace vkcv { const uint64_t id = handle.getId(); if (id >= m_images.size()) { + std::cerr << "Error: ImageManager::fillImage invalid handle" << std::endl; return; } @@ -371,6 +376,7 @@ namespace vkcv { const uint64_t id = handle.getId(); if (id >= m_images.size()) { + std::cerr << "Error: ImageManager::getImageWidth invalid handle" << std::endl; return 0; } @@ -383,6 +389,7 @@ namespace vkcv { const uint64_t id = handle.getId(); if (id >= m_images.size()) { + std::cerr << "Error: ImageManager::getImageHeight invalid handle" << std::endl; return 0; } @@ -395,6 +402,7 @@ namespace vkcv { const uint64_t id = handle.getId(); if (id >= m_images.size()) { + std::cerr << "Error: ImageManager::getImageDepth invalid handle" << std::endl; return 0; } @@ -406,6 +414,7 @@ namespace vkcv { void ImageManager::destroyImageById(uint64_t id) { if (id >= m_images.size()) { + std::cerr << "Error: ImageManager::destroyImageById invalid handle" << std::endl; return; } -- GitLab