mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-09 20:58:31 +09:00
[Feat] (MG_Backend): wire primitive restart into both backends; detect dualSrcBlend
Make GL_PRIMITIVE_RESTART[_FIXED_INDEX] actually take effect at draw time, following the detect-at-init / POST / fallback-or-hard-fail discipline. DirectVulkan: - Thread primitiveRestartEnable through the pipeline (payload + hash + input-assembly), set from the GL_PRIMITIVE_RESTART / _FIXED_INDEX caps. - Detect and enable primitiveTopologyListRestart (VK_EXT_primitive_topology_list_restart) at device creation; cache it. Strip/fan restart needs no feature; a *list* topology with restart and no feature hard-fails at the draw with the reason. - Vulkan only restarts on the fixed all-ones index value, so an arbitrary GL_PRIMITIVE_RESTART index that is not that value hard-fails in UploadAndBindIndexBuffer (where the index type is known). - Also detect+enable and cache the dualSrcBlend base feature (groundwork for GL_SRC1_* dual-source blending). DirectGLES: - Sync GL_PRIMITIVE_RESTART_FIXED_INDEX from either restart cap (GLES core has only the fixed-index form); an arbitrary non-fixed index hard-fails in the indexed draw paths with the reason. POST: dualSrcBlend and primitiveTopologyListRestart capability rows (Pass when supported, Warn with the fallback/hard-fail consequence otherwise). Library builds clean; SanityTest 31/31. (The actual restart rendering and the hard-fail paths need a real GPU and are not runtime-testable here.)
This commit is contained in:
@@ -126,6 +126,8 @@ namespace MobileGL::MG_Backend::DirectVulkan {
|
||||
XXHASH_VERIFY(XXH64_update(m_hashState, &payload.rasterizationSamples, sizeof(payload.rasterizationSamples)));
|
||||
XXHASH_VERIFY(XXH64_update(m_hashState, &payload.subpass, sizeof(payload.subpass)));
|
||||
XXHASH_VERIFY(XXH64_update(m_hashState, &payload.topology, sizeof(payload.topology)));
|
||||
XXHASH_VERIFY(
|
||||
XXH64_update(m_hashState, &payload.primitiveRestartEnable, sizeof(payload.primitiveRestartEnable)));
|
||||
XXHASH_VERIFY(XXH64_update(m_hashState, &payload.polygonMode, sizeof(payload.polygonMode)));
|
||||
XXHASH_VERIFY(XXH64_update(m_hashState, &payload.cullMode, sizeof(payload.cullMode)));
|
||||
XXHASH_VERIFY(XXH64_update(m_hashState, &payload.frontFace, sizeof(payload.frontFace)));
|
||||
@@ -212,6 +214,7 @@ namespace MobileGL::MG_Backend::DirectVulkan {
|
||||
|
||||
VkPipelineInputAssemblyStateCreateInfo ia{VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO};
|
||||
ia.topology = payload.topology;
|
||||
ia.primitiveRestartEnable = payload.primitiveRestartEnable ? VK_TRUE : VK_FALSE;
|
||||
|
||||
VkPipelineViewportStateCreateInfo vpci{VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO};
|
||||
vpci.viewportCount = 1;
|
||||
|
||||
Reference in New Issue
Block a user