[Chore] (MG_Backend/DirectVulkan): hard assert instead of silently fallback

This commit is contained in:
2026-02-22 12:08:31 +08:00
parent dae3dd9996
commit e9fee1358d
3 changed files with 23 additions and 27 deletions
@@ -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())) {
@@ -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()) {
@@ -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);