From 9087f13308e28ca841c2dbbcd32f249d2db5358b Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Sun, 6 Sep 2026 04:41:15 -0400 Subject: [PATCH] [Fix] (Pipe): let a readback fill the transform-feedback state its emulation reads - the depth/stencil read emulation opens a ScopedEmulationDrawState that pauses an active capture around its own draw, so ReadPixels/GetTexImage read IsTransformFeedbackActive and IsTransformFeedbackPaused; without the two kReadback rows every emulated readback aborts with Fatal{UnmigratedPipeInput, "IsTransformFeedbackActive@ReadPixels"} once the Espryt sites are converted --- MobileGL/MG_Pipe/FillPoints.def | 2 +- MobileGL/MG_Pipe/generated/PipeFillPoints.inc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/MobileGL/MG_Pipe/FillPoints.def b/MobileGL/MG_Pipe/FillPoints.def index ab15bbea..e66bff85 100644 --- a/MobileGL/MG_Pipe/FillPoints.def +++ b/MobileGL/MG_Pipe/FillPoints.def @@ -237,7 +237,7 @@ X(kReadback, GetSamplingResolutionGeneration) \ X(kReadback, GetTextureBindGeneration) \ X(kReadback, GetMaxTouchedTextureUnit) \ - X(kReadback, GetImageTextureBinding) \ + X(kReadback, GetImageTextureBinding) /* The depth/stencil read emulation draws (ScopedEmulationDrawState, */ /* DirectGLES.cpp:5224) and pauses an active capture around its own draw, so */ /* a readback reads the transform-feedback state exactly as a draw does. */ X(kReadback, IsTransformFeedbackActive) X(kReadback, IsTransformFeedbackPaused) \ /* kXfbSpan */ \ X(kXfbSpan, GetTransformFeedbackProgram) \ X(kXfbSpan, GetBufferBindingPoint) \ diff --git a/MobileGL/MG_Pipe/generated/PipeFillPoints.inc b/MobileGL/MG_Pipe/generated/PipeFillPoints.inc index 1afd3e51..41c6c2f0 100644 --- a/MobileGL/MG_Pipe/generated/PipeFillPoints.inc +++ b/MobileGL/MG_Pipe/generated/PipeFillPoints.inc @@ -287,8 +287,8 @@ inline constexpr MGPipeFieldMask kMGPipeClassFieldMask[kMGPipeVerbClassCount] = {{0x5f50ffa001344101ull, 0x0000000000000000ull}}, // kTextureOp: 14 fields (7 own + 7 sticky) {{0x5c00f22001200101ull, 0x0000000000000000ull}}, - // kReadback: 22 fields (15 own + 7 sticky) - {{0x5c50f3a041300541ull, 0x0000000000000000ull}}, + // kReadback: 24 fields (17 own + 7 sticky) + {{0x5f50f3a041300541ull, 0x0000000000000000ull}}, // kXfbSpan: 15 fields (8 own + 7 sticky) {{0x7f0b402000000380ull, 0x0000000000000000ull}}, // kProgramOp: 18 fields (11 own + 7 sticky)