From 8795e1e402e329ccce26b545b84c8f101be419c9 Mon Sep 17 00:00:00 2001 From: Kearwood Gilbert Date: Sun, 14 Jan 2024 15:53:50 -0800 Subject: [PATCH] Suppressing debug text rendering until debug font texture has been streamed to the GPU. Fixes Vulkan validation errors on MacOS. Fix Vulkan validation error on macOS when clearing with the black frame pass render pass during initialization. --- kraken/KRCamera.cpp | 36 +++++++++++++++++++----------------- kraken/KRSurface.cpp | 2 +- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/kraken/KRCamera.cpp b/kraken/KRCamera.cpp index 50a757a..a9e202d 100755 --- a/kraken/KRCamera.cpp +++ b/kraken/KRCamera.cpp @@ -781,23 +781,25 @@ void KRCamera::renderDebug(VkCommandBuffer& commandBuffer, KRSurface& surface) KRTexture* fontTexture = m_pContext->getTextureManager()->getTexture("font"); fontTexture->resetPoolExpiry(0.0f, KRTexture::TEXTURE_USAGE_UI); - - PipelineInfo info{}; - std::string shader_name("debug_font"); - info.shader_name = &shader_name; - info.pCamera = this; - info.renderPass = KRNode::RENDER_PASS_FORWARD_TRANSPARENT; - info.rasterMode = RasterMode::kAlphaBlendNoTest; - info.cullMode = CullMode::kCullNone; - info.vertexAttributes = (1 << KRMesh::KRENGINE_ATTRIB_VERTEX) | (1 << KRMesh::KRENGINE_ATTRIB_TEXUVA); - info.modelFormat = ModelFormat::KRENGINE_MODEL_FORMAT_TRIANGLES; - KRPipeline* fontShader = m_pContext->getPipelineManager()->getPipeline(surface, info); - fontShader->setImageBinding("fontTexture", fontTexture, getContext().getSamplerManager()->DEFAULT_CLAMPED_SAMPLER); - fontShader->bind(commandBuffer, *this, m_viewport, Matrix4(), nullptr, nullptr, nullptr, KRNode::RENDER_PASS_FORWARD_TRANSPARENT); - - m_debug_text_vbo_data.bind(commandBuffer); - - vkCmdDraw(commandBuffer, vertex_count, 1, 0, 0); + if (fontTexture->getStreamLevel(KRTexture::TEXTURE_USAGE_UI) != kraken_stream_level::STREAM_LEVEL_OUT) { + + PipelineInfo info{}; + std::string shader_name("debug_font"); + info.shader_name = &shader_name; + info.pCamera = this; + info.renderPass = KRNode::RENDER_PASS_FORWARD_TRANSPARENT; + info.rasterMode = RasterMode::kAlphaBlendNoTest; + info.cullMode = CullMode::kCullNone; + info.vertexAttributes = (1 << KRMesh::KRENGINE_ATTRIB_VERTEX) | (1 << KRMesh::KRENGINE_ATTRIB_TEXUVA); + info.modelFormat = ModelFormat::KRENGINE_MODEL_FORMAT_TRIANGLES; + KRPipeline* fontShader = m_pContext->getPipelineManager()->getPipeline(surface, info); + fontShader->setImageBinding("fontTexture", fontTexture, getContext().getSamplerManager()->DEFAULT_CLAMPED_SAMPLER); + fontShader->bind(commandBuffer, *this, m_viewport, Matrix4(), nullptr, nullptr, nullptr, KRNode::RENDER_PASS_FORWARD_TRANSPARENT); + + m_debug_text_vbo_data.bind(commandBuffer); + + vkCmdDraw(commandBuffer, vertex_count, 1, 0, 0); + } debugPass.end(commandBuffer); diff --git a/kraken/KRSurface.cpp b/kraken/KRSurface.cpp index 529541c..f363d5f 100644 --- a/kraken/KRSurface.cpp +++ b/kraken/KRSurface.cpp @@ -236,7 +236,7 @@ KrResult KRSurface::createSwapChain() info.clearColor = true; info.keepColor = true; - info.clearDepth = false; + info.clearDepth = true; info.keepDepth = false; info.finalPass = true; m_blackFramePass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info);