mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-12 14:18:31 +09:00
[Feat] (MG_Backend/DirectVulkan): native GPU indirect draws + draw parameters
- Enable multiDrawIndirect and shaderDrawParameters device features when supported (the latter via VkPhysicalDeviceShaderDrawParametersFeatures on Vulkan 1.1+), so DrawIndex/BaseInstance SPIR-V builtins are valid and vkCmdDrawIndexedIndirect(Count) may draw more than one command. - Plain glMultiDrawElementsIndirect no longer requires a GL_PARAMETER_BUFFER (it previously drew nothing for the standard Flywheel call); it now issues a native vkCmdDrawIndexedIndirect, with a per-command loop fallback when the multiDrawIndirect feature is unavailable. - glDrawElementsIndirect / glDrawArraysIndirect / glMultiDrawArraysIndirect read the live GPU buffer via native indirect draws instead of the CPU shadow (which cannot see compute-written commands); the CPU path remains only for client-memory commands. - Advertise the same five extensions as DirectGLES for Flywheel's capability probe. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -156,6 +156,9 @@ namespace MobileGL::MG_Backend::DirectVulkan {
|
||||
void DrawArrays(const DrawCmd& payload);
|
||||
void DrawElements(const DrawIndexedCmd& payload);
|
||||
void MultiDrawElements(const MultiDrawIndexedCmd& payloads);
|
||||
void MultiDrawElementsIndirect(GLenum mode, GLenum type, const void* indirect, GLsizei drawcount,
|
||||
GLsizei stride);
|
||||
void MultiDrawArraysIndirect(GLenum mode, const void* indirect, GLsizei drawcount, GLsizei stride);
|
||||
void MultiDrawElementsIndirectCount(GLenum mode, GLenum type, const void* indirect, GLintptr drawcount,
|
||||
GLsizei maxdrawcount, GLsizei stride);
|
||||
void Present();
|
||||
@@ -229,6 +232,9 @@ namespace MobileGL::MG_Backend::DirectVulkan {
|
||||
Bool m_drawIndirectCountExtensionEnabled = false;
|
||||
Bool m_indexTypeUint8ExtensionEnabled = false;
|
||||
Bool m_logicOpFeatureEnabled = false;
|
||||
Bool m_multiDrawIndirectFeatureEnabled = false;
|
||||
Bool m_shaderDrawParametersExtensionEnabled = false;
|
||||
Bool m_shaderDrawParametersFeatureEnabled = false;
|
||||
using PFNDrawIndexedIndirectCountFunc = void(VKAPI_PTR*)(VkCommandBuffer commandBuffer, VkBuffer buffer,
|
||||
VkDeviceSize offset, VkBuffer countBuffer,
|
||||
VkDeviceSize countBufferOffset, Uint32 maxDrawCount,
|
||||
|
||||
Reference in New Issue
Block a user