[Fix] (Pipe): account for DispatchIndirect and Query in Coverage.def's target-by-target split, re-sort the new emitted row, and name the P3a default mask in ConfigLoader's include comment

This commit is contained in:
2026-09-08 03:51:21 -04:00
parent 355c60b901
commit 56366331dc
2 changed files with 26 additions and 12 deletions
+3 -2
View File
@@ -8,8 +8,9 @@
#include "Config.h" #include "Config.h"
#if MOBILEGL_PIPE_PUSH #if MOBILEGL_PIPE_PUSH
// For kMGPipeSubsystemsMigratedAtP2, the push build's PipePush default. Push-only, so // For kMGPipeSubsystemsMigratedAtP3a, the push build's PipePush default (the P2 constant
// the pull build's translation unit is unchanged. // beside it is the phase-by-phase control, not the default). Push-only, so the pull
// build's translation unit is unchanged.
#include <MG_Pipe/MGPipe.h> #include <MG_Pipe/MGPipe.h>
#endif #endif
+23 -10
View File
@@ -37,21 +37,34 @@
/* Polymorphic over BufferTarget, and P3a SPLITS it - not by re-vendoring the */ \ /* Polymorphic over BufferTarget, and P3a SPLITS it - not by re-vendoring the */ \
/* inventory (the extractor lives in MobileGL-CS and still does not carry the */ \ /* inventory (the extractor lives in MobileGL-CS and still does not carry the */ \
/* target argument), but by supplying the target from the EMISSION SITE, which */ \ /* target argument), but by supplying the target from the EMISSION SITE, which */ \
/* knows it exactly. The split, target by target: */ \ /* knows it exactly. The split, target by target, in BufferTarget's OWN */ \
/* ArrayBuffer, and the per-attribute buffer of a VAO -> set_vertex_buffers */ \ /* spelling (BufferObject.h:15-33) so the list cross-checks mechanically: */ \
/* ElementArrayBuffer -> set_index_buffer */ \ /* Vertex, and the per-attribute buffer of a VAO -> set_vertex_buffers */ \
/* DrawIndirectBuffer, ParameterBuffer -> set_indirect_buffers */ \ /* Index -> set_index_buffer */ \
/* Uniform/ShaderStorage/AtomicCounter/TransformFeedback */ \ /* DrawIndirect, Parameter -> set_indirect_buffers */ \
/* -> set_shader_buffers */ \ /* Uniform, ShaderStorage, AtomicCounter, */ \
/* CopyRead/CopyWrite/PixelPack/PixelUnpack/Texture -> still pulled: the */ \ /* TransformFeedback -> set_shader_buffers */ \
/* transfer and pixel-store targets have no call of their own yet. */ \ /* CopyRead, CopyWrite, PixelPack, PixelUnpack, */ \
/* Texture -> still pulled: the */ \
/* transfer and pixel-store targets have no call of their own yet; */ \
/* DispatchIndirect -> still pulled, and */ \
/* it is the one a reader most plausibly assumes set_indirect_buffers */ \
/* covers: BOTH backends read it (SyncBoundBuffer at every */ \
/* glDispatchComputeIndirect) and NO call carries it - MGPIndirectBuffers */ \
/* is the DrawIndirect + Parameter pair only - so the field stays the */ \
/* fill loop's for this target; */ \
/* Query -> still pulled: no */ \
/* backend reads it at all and no call names it. */ \
/* That is 15 of 15; a target missing from this list is a target a later */ \
/* phase would retire the pull for on the strength of a split that never */ \
/* covered it. */ \
/* THE ROW STAYS ONE ROW, and that is structural rather than a shortcut: this */ \ /* THE ROW STAYS ONE ROW, and that is structural rather than a shortcut: this */ \
/* list IS the MGPipeInputField enum and the PipeInputs field set, and the */ \ /* list IS the MGPipeInputField enum and the PipeInputs field set, and the */ \
/* field is ONE array (m_bufferBindingSlot[kBufferTargetCount]) that a second */ \ /* field is ONE array (m_bufferBindingSlot[kBufferTargetCount]) that a second */ \
/* row of the same name could only duplicate. So the split lives here and in */ \ /* row of the same name could only duplicate. So the split lives here and in */ \
/* the emitters, and the row keeps naming set_indirect_buffers for the plan's */ \ /* the emitters, and the row keeps naming set_indirect_buffers for the plan's */ \
/* explicit replacement of the DrawIndirect/Parameter pair. It is deliberately */ \ /* explicit replacement of the DrawIndirect/Parameter pair. It is deliberately */ \
/* NOT in the EMITTED list below: five targets above are still pulled, and a */ \ /* NOT in the EMITTED list below: seven targets above are still pulled, and a */ \
/* row there says "the whole field is supplied", which for this field would be */ \ /* row there says "the whole field is supplied", which for this field would be */ \
/* the same half-truth GetPixelStoreParameters is kept out for. */ \ /* the same half-truth GetPixelStoreParameters is kept out for. */ \
X(GetBufferBindingSlot, SetIndirectBuffers) \ X(GetBufferBindingSlot, SetIndirectBuffers) \
@@ -184,9 +197,9 @@
// rather than silently by this row's presence. // rather than silently by this row's presence.
#define MGP_COVERAGE_EMITTED_LIST(X) \ #define MGP_COVERAGE_EMITTED_LIST(X) \
X(GetBlendColor, SetDynamicState) \ X(GetBlendColor, SetDynamicState) \
X(GetBoundVertexArray, BindVertexElements) \
X(GetBlendEquationIndexed, CreateRenderState) \ X(GetBlendEquationIndexed, CreateRenderState) \
X(GetBlendFuncIndexed, CreateRenderState) \ X(GetBlendFuncIndexed, CreateRenderState) \
X(GetBoundVertexArray, BindVertexElements) \
X(GetClampReadColor, SetDynamicState) \ X(GetClampReadColor, SetDynamicState) \
X(GetClearColor, SetDynamicState) \ X(GetClearColor, SetDynamicState) \
X(GetClearDepth, SetDynamicState) \ X(GetClearDepth, SetDynamicState) \