From e9fee1358dffa7900b13fb0649b8eed6b9b0db7e Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Sun, 22 Feb 2026 12:08:31 +0800 Subject: [PATCH] [Chore] (MG_Backend/DirectVulkan): hard assert instead of silently fallback --- .../Renderer/UniformDescriptorBinder.cpp | 3 +- .../Renderer/VkTextureSamplerManager.cpp | 4 +- .../DirectVulkan/Renderer/VulkanRenderer.cpp | 43 +++++++++---------- 3 files changed, 23 insertions(+), 27 deletions(-) diff --git a/MobileGL/MG_Backend/DirectVulkan/Renderer/UniformDescriptorBinder.cpp b/MobileGL/MG_Backend/DirectVulkan/Renderer/UniformDescriptorBinder.cpp index 781b1d60..4697b564 100644 --- a/MobileGL/MG_Backend/DirectVulkan/Renderer/UniformDescriptorBinder.cpp +++ b/MobileGL/MG_Backend/DirectVulkan/Renderer/UniformDescriptorBinder.cpp @@ -480,8 +480,7 @@ namespace MobileGL::MG_Backend::DirectVulkan { return false; } - if (m_framebufferManager && - m_framebufferManager->Transition(commandBuffer, + if (m_framebufferManager->Transition(commandBuffer, VkFramebufferManager::TransitionResource::OffscreenColorTexture, VkFramebufferManager::TransitionUsage::ShaderRead, texture->GetExternalIndex())) { diff --git a/MobileGL/MG_Backend/DirectVulkan/Renderer/VkTextureSamplerManager.cpp b/MobileGL/MG_Backend/DirectVulkan/Renderer/VkTextureSamplerManager.cpp index 221f0ace..f2945781 100644 --- a/MobileGL/MG_Backend/DirectVulkan/Renderer/VkTextureSamplerManager.cpp +++ b/MobileGL/MG_Backend/DirectVulkan/Renderer/VkTextureSamplerManager.cpp @@ -90,9 +90,7 @@ namespace MobileGL::MG_Backend::DirectVulkan { Bool VkTextureSamplerManager::SyncTextureAndGetDescriptor(const MG_State::GLState::ITextureObject& texture, const MG_State::GLState::SamplerObject* samplerOverride, VkDescriptorImageInfo& outImageInfo) { - if (m_device == VK_NULL_HANDLE) { - return GetFallbackDescriptor(outImageInfo); - } + MOBILEGL_ASSERT(m_device != VK_NULL_HANDLE, "SyncTextureAndGetDescriptor: m_device == VK_NULL_HANDLE"); auto it = m_textureResources.find(texture.GetExternalIndex()); if (it == m_textureResources.end()) { diff --git a/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp b/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp index 7331867a..9300c838 100644 --- a/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp +++ b/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp @@ -160,30 +160,29 @@ namespace MobileGL::MG_Backend::DirectVulkan { payload.renderPass = (m_activeRenderPass != VK_NULL_HANDLE) ? m_activeRenderPass : GetDefaultLoadRenderPass(); payload.subpass = 0; payload.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; - if (MG_State::pGLContext != nullptr) { - const Bool depthTestEnabled = MG_State::pGLContext->IsCapabilityEnabled(CapabilityInput::DepthTest); - payload.depthTestEnable = depthTestEnabled; - payload.depthWriteEnable = depthTestEnabled && MG_State::pGLContext->GetDepthMask(); - payload.depthCompareOp = toVkCompareOp(MG_State::pGLContext->GetDepthFunc()); + const Bool depthTestEnabled = MG_State::pGLContext->IsCapabilityEnabled(CapabilityInput::DepthTest); + payload.depthTestEnable = depthTestEnabled; + payload.depthWriteEnable = depthTestEnabled && MG_State::pGLContext->GetDepthMask(); + payload.depthCompareOp = toVkCompareOp(MG_State::pGLContext->GetDepthFunc()); - payload.blendEnable = MG_State::pGLContext->IsCapabilityEnabled(CapabilityInput::Blend); - BlendFactor srcRGB = BlendFactor::One; - BlendFactor dstRGB = BlendFactor::Zero; - BlendFactor srcAlpha = BlendFactor::One; - BlendFactor dstAlpha = BlendFactor::Zero; - MG_State::pGLContext->GetBlendFunc(srcRGB, dstRGB, srcAlpha, dstAlpha); - payload.srcColorBlendFactor = toVkBlendFactor(srcRGB); - payload.dstColorBlendFactor = toVkBlendFactor(dstRGB); - payload.srcAlphaBlendFactor = toVkBlendFactor(srcAlpha); - payload.dstAlphaBlendFactor = toVkBlendFactor(dstAlpha); + payload.blendEnable = MG_State::pGLContext->IsCapabilityEnabled(CapabilityInput::Blend); + BlendFactor srcRGB = BlendFactor::One; + BlendFactor dstRGB = BlendFactor::Zero; + BlendFactor srcAlpha = BlendFactor::One; + BlendFactor dstAlpha = BlendFactor::Zero; + MG_State::pGLContext->GetBlendFunc(srcRGB, dstRGB, srcAlpha, dstAlpha); + payload.srcColorBlendFactor = toVkBlendFactor(srcRGB); + payload.dstColorBlendFactor = toVkBlendFactor(dstRGB); + payload.srcAlphaBlendFactor = toVkBlendFactor(srcAlpha); + payload.dstAlphaBlendFactor = toVkBlendFactor(dstAlpha); + + payload.colorWriteMask = 0; + const BoolVec4 colorMask = MG_State::pGLContext->GetColorMask(); + if (colorMask.x()) payload.colorWriteMask |= VK_COLOR_COMPONENT_R_BIT; + if (colorMask.y()) payload.colorWriteMask |= VK_COLOR_COMPONENT_G_BIT; + if (colorMask.z()) payload.colorWriteMask |= VK_COLOR_COMPONENT_B_BIT; + if (colorMask.w()) payload.colorWriteMask |= VK_COLOR_COMPONENT_A_BIT; - payload.colorWriteMask = 0; - const BoolVec4 colorMask = MG_State::pGLContext->GetColorMask(); - if (colorMask.x()) payload.colorWriteMask |= VK_COLOR_COMPONENT_R_BIT; - if (colorMask.y()) payload.colorWriteMask |= VK_COLOR_COMPONENT_G_BIT; - if (colorMask.z()) payload.colorWriteMask |= VK_COLOR_COMPONENT_B_BIT; - if (colorMask.w()) payload.colorWriteMask |= VK_COLOR_COMPONENT_A_BIT; - } payload.stages = &stages; payload.vertexInputState = &vertexInputState; return m_pipelineFactory->GetOrCreatePipeline(payload);