From bb2a236d5f76f5d5b3df2cdc16e61adf98a3cabb Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Mon, 7 Sep 2026 23:38:10 -0400 Subject: [PATCH] [Fix] (Pipe): drop the emitter arm for set_pixel_pack_state that spans retired - spans (d1a7c5f1) removed GetPixelStoreParameters from the emitted list because the call carries the pack half of a two-element field, so the generated MGPipeFieldEmitter no longer has a SetPixelPackState enumerator; the tracker's subsystem map and its static_assert, written against the contract, still named it and the push and verify builds did not compile on the integrated tree - the NEW_PIXEL_PACK dirty bit still names the pixel-pack subsystem, which is what the emission gate consults; the field itself stays in the residual fill loop by design --- MobileGL/MG_Impl/Pipe/PipeFill.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/MobileGL/MG_Impl/Pipe/PipeFill.cpp b/MobileGL/MG_Impl/Pipe/PipeFill.cpp index 884cc69e..c80846d3 100644 --- a/MobileGL/MG_Impl/Pipe/PipeFill.cpp +++ b/MobileGL/MG_Impl/Pipe/PipeFill.cpp @@ -627,8 +627,6 @@ namespace MobileGL::MG_Pipe { case MGPipeFieldEmitter::CreateRenderState: case MGPipeFieldEmitter::SetDynamicState: return kMGPipeSubsystemRenderState; - case MGPipeFieldEmitter::SetPixelPackState: - return kMGPipeSubsystemPixelPack; case MGPipeFieldEmitter::SetPatchState: return kMGPipeSubsystemPatchState; case MGPipeFieldEmitter::SetVertexAttribDefaults: @@ -650,9 +648,13 @@ namespace MobileGL::MG_Pipe { static_assert(SubsystemForEmitter(MGPipeFieldEmitter::SetDynamicState) == MGPipeSubsystemForDirty(MGPipeDirty::NewRenderState), "set_dynamic_state and NEW_RENDER_STATE must name one subsystem"); - static_assert(SubsystemForEmitter(MGPipeFieldEmitter::SetPixelPackState) == - MGPipeSubsystemForDirty(MGPipeDirty::NewPixelPack), - "set_pixel_pack_state and NEW_PIXEL_PACK must name one subsystem"); + // set_pixel_pack_state has no emitter row on purpose (Coverage.def, above + // MGP_COVERAGE_EMITTED_LIST): it carries the PACK half of PipeInputs::m_pixelStore[2] + // only, so the field keeps going through the residual fill loop and no field may be + // skipped on its account. The NEW_PIXEL_PACK bit still names the subsystem the call + // belongs to, which is what the emission gate consults. + static_assert(MGPipeSubsystemForDirty(MGPipeDirty::NewPixelPack) == kMGPipeSubsystemPixelPack, + "NEW_PIXEL_PACK must name the pixel-pack subsystem"); static_assert(SubsystemForEmitter(MGPipeFieldEmitter::SetPatchState) == MGPipeSubsystemForDirty(MGPipeDirty::NewPatchState), "set_patch_state and NEW_PATCH_STATE must name one subsystem");