[Chore] (MG_Backend/DirectVulkan): get rid of redundant guardrails

This commit is contained in:
2026-02-22 10:19:44 +08:00
parent fb3e2123cc
commit 96e993eecf
@@ -222,23 +222,20 @@ namespace MobileGL::MG_Backend::DirectVulkan {
m_pipelineFactory = MakeUnique<PipelineFactory>(m_device, m_config); m_pipelineFactory = MakeUnique<PipelineFactory>(m_device, m_config);
m_programFactory = MakeUnique<ProgramFactory>(m_device, m_config); m_programFactory = MakeUnique<ProgramFactory>(m_device, m_config);
m_textureSamplerManager = MakeUnique<VkTextureSamplerManager>(); m_textureSamplerManager = MakeUnique<VkTextureSamplerManager>();
if (!m_textureSamplerManager->Initialize({m_device, m_physicalDevice.handle, m_commandPool, m_graphicsQueue})) { auto succeeded = false;
MGLOG_E("VkTextureSamplerManager initialization failed. Sampler/texture descriptors will fallback."); succeeded = m_textureSamplerManager->Initialize({m_device, m_physicalDevice.handle, m_commandPool, m_graphicsQueue});
m_textureSamplerManager.reset(); MOBILEGL_ASSERT(succeeded, "VkTextureSamplerManager initialization failed.");
}
m_framebufferManager = MakeUnique<VkFramebufferManager>(); m_framebufferManager = MakeUnique<VkFramebufferManager>();
if (!m_framebufferManager->Initialize({m_device, m_physicalDevice.handle})) { succeeded = m_framebufferManager->Initialize({m_device, m_physicalDevice.handle});
MGLOG_E("VkFramebufferManager initialization failed. Offscreen FBO clear path is disabled."); MOBILEGL_ASSERT(succeeded, "VkFramebufferManager initialization failed.");
m_framebufferManager.reset();
}
m_uniformDescriptorBinder = MakeUnique<UniformDescriptorBinder>(); m_uniformDescriptorBinder = MakeUnique<UniformDescriptorBinder>();
if (!m_uniformDescriptorBinder->Initialize(m_device, m_allocator, succeeded = m_uniformDescriptorBinder->Initialize(m_device, m_allocator,
m_physicalDevice.properties.limits.minUniformBufferOffsetAlignment, m_physicalDevice.properties.limits.minUniformBufferOffsetAlignment,
m_config.MaxFramesInFlight, 16, 64, 4 * 1024 * 1024, m_config.MaxFramesInFlight, 16, 64, 4 * 1024 * 1024,
m_textureSamplerManager.get(), m_framebufferManager.get())) { m_textureSamplerManager.get(), m_framebufferManager.get());
MGLOG_E("UniformDescriptorBinder initialization failed. UBO sync on Vulkan backend is disabled."); MOBILEGL_ASSERT(succeeded, "UniformDescriptorBinder initialization failed.");
m_uniformDescriptorBinder.reset();
}
m_vertexInputStateFactory = MakeUnique<VertexInputStateFactory>(m_config); m_vertexInputStateFactory = MakeUnique<VertexInputStateFactory>(m_config);
PrepareDemoPipeline(); PrepareDemoPipeline();
@@ -482,7 +479,7 @@ namespace MobileGL::MG_Backend::DirectVulkan {
VkCommandBuffer& commandBuffer = *commandBufferPtr; VkCommandBuffer& commandBuffer = *commandBufferPtr;
if (!drawTargetsDefault) { if (!drawTargetsDefault) {
if (!m_framebufferManager || !m_renderPassManager || !drawFbo) { if (!drawFbo) {
MGLOG_D("EnsureFrameRecordingStarted skipped: offscreen draw target is unavailable"); MGLOG_D("EnsureFrameRecordingStarted skipped: offscreen draw target is unavailable");
return; return;
} }
@@ -1242,14 +1239,8 @@ namespace MobileGL::MG_Backend::DirectVulkan {
m_activeDrawFboExternalIndex = 0; m_activeDrawFboExternalIndex = 0;
} }
if (!m_framebufferManager && (!readIsDefaultFramebuffer || !drawIsDefaultFramebuffer)) { MOBILEGL_ASSERT(m_framebufferManager != nullptr, "BlitFramebuffer: framebuffer manager not available");
MGLOG_W("BlitFramebuffer skipped: offscreen framebuffer manager not available"); MOBILEGL_ASSERT(m_renderPassManager != nullptr, "BlitFramebuffer: renderpass manager is null");
return false;
}
if (!m_renderPassManager) {
MGLOG_W("BlitFramebuffer skipped: render pass manager not available");
return false;
}
auto consumePendingClearForTarget = [&](Bool targetIsDefault, Uint targetFboExternalIndex) { auto consumePendingClearForTarget = [&](Bool targetIsDefault, Uint targetFboExternalIndex) {
const Uint64 pendingKey = BuildPendingClearKey(targetFboExternalIndex, targetIsDefault); const Uint64 pendingKey = BuildPendingClearKey(targetFboExternalIndex, targetIsDefault);
@@ -1275,7 +1266,6 @@ namespace MobileGL::MG_Backend::DirectVulkan {
if (!GetDefaultRenderTargetForCurrentImage(renderPass, framebuffer, extent, depthStencilFormat)) { if (!GetDefaultRenderTargetForCurrentImage(renderPass, framebuffer, extent, depthStencilFormat)) {
return; return;
} }
MOBILEGL_ASSERT(m_renderPassManager != nullptr, "BlitFramebuffer: manager is null");
m_renderPassManager->BeginRenderPass(commandBuffer, renderPass, framebuffer, extent); m_renderPassManager->BeginRenderPass(commandBuffer, renderPass, framebuffer, extent);
m_activeRenderExtent = extent; m_activeRenderExtent = extent;
@@ -1589,20 +1579,16 @@ namespace MobileGL::MG_Backend::DirectVulkan {
dstDepthExtent = m_swapchainObject.GetExtent(); dstDepthExtent = m_swapchainObject.GetExtent();
dstDepthFormat = m_depthStencilFormat; dstDepthFormat = m_depthStencilFormat;
} }
} else if (m_framebufferManager) { } else {
if (!MG_State::pGLContext) { const auto drawFbo = MG_State::pGLContext->GetFramebufferObject(drawFboExternalIndex);
MGLOG_W("BlitFramebuffer: GL context unavailable for draw depth/stencil FBO"); if (!drawFbo) {
} else { MGLOG_W("BlitFramebuffer: draw FBO %u not found", drawFboExternalIndex);
const auto drawFbo = MG_State::pGLContext->GetFramebufferObject(drawFboExternalIndex); } else if (!m_framebufferManager->EnsureOffscreenColorTarget(drawFboExternalIndex, *drawFbo)) {
if (!drawFbo) { MGLOG_W("BlitFramebuffer: failed to materialize draw FBO %u for depth/stencil",
MGLOG_W("BlitFramebuffer: draw FBO %u not found", drawFboExternalIndex); drawFboExternalIndex);
} else if (!m_framebufferManager->EnsureOffscreenColorTarget(drawFboExternalIndex, *drawFbo)) { } else if (!m_framebufferManager->GetOffscreenDepthStencilImage(drawFboExternalIndex, dstDepthImage,
MGLOG_W("BlitFramebuffer: failed to materialize draw FBO %u for depth/stencil", dstDepthExtent, dstDepthFormat)) {
drawFboExternalIndex); MGLOG_W("BlitFramebuffer: draw FBO %u has no depth/stencil image", drawFboExternalIndex);
} else if (!m_framebufferManager->GetOffscreenDepthStencilImage(drawFboExternalIndex, dstDepthImage,
dstDepthExtent, dstDepthFormat)) {
MGLOG_W("BlitFramebuffer: draw FBO %u has no depth/stencil image", drawFboExternalIndex);
}
} }
} }