blob: 3455960ab9d2df51652790790b0ccaa8eafbf8b0 [file] [log] [blame]
/*
* Copyright 2025 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "tests/Test.h"
#if defined(SK_GRAPHITE)
#include "include/gpu/graphite/Context.h"
#include "include/gpu/graphite/PrecompileContext.h"
#include "src/gpu/graphite/PrecompileContextPriv.h"
#include "src/gpu/graphite/TextureInfoPriv.h"
#include "src/sksl/SkSLUtil.h"
#include "tests/graphite/precompile/AndroidRuntimeEffectManager.h"
#include "tests/graphite/precompile/PrecompileTestUtils.h"
using namespace skgpu::graphite;
using namespace PrecompileTestUtils;
void VisitPrecompileSettings(skgpu::graphite::PrecompileContext*,
RuntimeEffectManager& effectManager,
const std::function<void(skgpu::graphite::PrecompileContext*,
const PrecompileSettings&,
int index)>& func);
namespace {
// These Pipelines are candidates for inclusion in Android's precompile. They were generated
// by collecting all the Pipelines from the main Android CUJs, including various HDR cases.
//
// The prefix comment pattern's meaning is:
// a number - handled by some case in kPrecompileCases
// a ? - a candidate for addition to kPrecompileCases
// an X - skipped (c.f. skip())
// blank - not yet investigated
static const PipelineLabel kCases[] = {
/* 0 */ { -1, "RP((RGBA16F+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 1 */ { -1, "RP((RGBA16F+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] SrcOver" },
/* 2 */ { -1, "RP((RGBA16F+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_LinearEffect_UNKNOWN__SRGB__false__UNKNOWN__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] SrcOver" },
/* ? */ { -1, "RP((RGBA16F+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_LinearEffect_UNKNOWN__SRGB__false__UNKNOWN__Shader [ RE_MouriMap_TonemapEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kEwAAPcAAAAAAAAA) ] ColorSpaceTransform ] ] LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] SrcOver" },
/* 4 */ { -1, "RP((RGBA16F+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_LinearEffect_UNKNOWN__SRGB__false__UNKNOWN__Shader [ SolidColor ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] SrcOver" },
/* 5 */ { -1, "RP((RGBA16F+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_MouriMap_BlurEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] Passthrough ] ] ] Src" },
/* 6 */ { -1, "RP((RGBA16F+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_MouriMap_Chunk8x8Effect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] Passthrough ] ] ] Src" },
/* 7 */ { -1, "RP((RGBA16F+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_MouriMap_CrossTalkAndChunk16x16Effect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ] Src" },
/* 8 */ { -1, "RP((RGBA16F+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_MouriMap_CrossTalkAndChunk16x16Effect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kEwAAPcAAAAAAAAA) ] ColorSpaceTransform ] ] ] Src" },
/* 9 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 10 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 11 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"BlendCompose [ RE_LinearEffect_0x188a0000__DISPLAY_P3__false__0x90a0000__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 12 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"Compose [ BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] MatrixColorFilter ] SrcOver" },
/* 13 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"Compose [ BlendCompose [ RE_LinearEffect_0x188a0000__DISPLAY_P3__false__0x90a0000__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] AlphaOnlyPaintColor SrcIn ] MatrixColorFilter ] SrcOver" },
/* 14 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"Compose [ Compose [ BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] MatrixColorFilter ] Dither ] SrcOver" },
/* 15 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"Compose [ Compose [ BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] AlphaOnlyPaintColor SrcIn ] MatrixColorFilter ] Dither ] SrcOver" },
/* 16 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"Compose [ Compose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] MatrixColorFilter ] Dither ] SrcOver" },
/* 17 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"Compose [ Compose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] MatrixColorFilter ] Dither ] SrcOver" },
/* 18 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"Compose [ Compose [ RE_LinearEffect_0x188a0000__DISPLAY_P3__false__0x90a0000__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] MatrixColorFilter ] Dither ] SrcOver" },
/* 19 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"Compose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] MatrixColorFilter ] SrcOver" },
/* 20 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"Compose [ RE_LinearEffect_0x188a0000__DISPLAY_P3__false__0x90a0000__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] MatrixColorFilter ] SrcOver" },
/* 21 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"Compose [ RE_LinearEffect_BT2020_ITU_PQ__BT2020__false__UNKNOWN__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kEwAAPcAAAAAAAAA) ] ColorSpaceTransform ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] Dither ] SrcOver" },
/* 22 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 23 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] SrcOver AnalyticClip" },
/* 24 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] SrcOver" },
/* 25 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHoAAO4AAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 26 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"RE_LinearEffect_0x188a0000__DISPLAY_P3__false__0x90a0000__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] SrcOver" },
/* 27 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"SolidColor SrcOver" },
/* 28 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 29 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 30 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ Compose [ BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] MatrixColorFilter ] Dither ] SrcOver" },
/* 31 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ Compose [ BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] AlphaOnlyPaintColor SrcIn ] MatrixColorFilter ] Dither ] SrcOver" },
/* 32 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ Compose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] MatrixColorFilter ] Dither ] SrcOver" },
/* 33 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ Compose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] MatrixColorFilter ] Dither ] SrcOver AnalyticClip" },
/* 34 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ Compose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] MatrixColorFilter ] Dither ] SrcOver" },
/* 35 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ Compose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] MatrixColorFilter ] Dither ] SrcOver AnalyticClip" },
/* 36 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] RGBPaintColor DstIn ] ] MatrixColorFilter ] SrcOver" },
/* 37 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ LocalMatrix [ BlendCompose [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] RGBPaintColor DstIn ] ] MatrixColorFilter ] SrcOver" },
/* 38 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] MatrixColorFilter ] SrcOver" },
/* 39 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ RE_LinearEffect_BT2020_ITU_PQ__BT2020__false__UNKNOWN__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kEwAAPcAAAAAAAAA) ] ColorSpaceTransform ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] Dither ] SrcOver" },
/* 40 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ RE_LinearEffect_BT2020_ITU_PQ__BT2020__false__UNKNOWN__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kEwAAPcAAAAAAAAA) ] ColorSpaceTransform ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] Dither ] SrcOver AnalyticClip" },
/* 41 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] Src" },
/* 42 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 43 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] SrcOver AnalyticClip" },
/* 44 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] SrcOver" },
/* 45 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] SrcOver AnalyticClip" },
/* 46 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHIAAPAAAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 47 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHoAAO4AAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 48 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHoAAO4AAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver AnalyticClip" },
/* 49 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_BlurFilter_MixEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] ] Src" },
/* X */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_GainmapEffect [ RE_MouriMap_TonemapEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransform ] ] LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] ColorSpaceTransformPremul ColorSpaceTransformPremul ] LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransform ] ] ColorSpaceTransformPremul ColorSpaceTransformPremul ] Src" },
/* 51 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_KawaseBlurDualFilter_HighSampleBlurEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] Passthrough ] ] ] Src" },
/* 52 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_KawaseBlurDualFilter_LowSampleBlurEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] Passthrough ] ] ] Src" },
/* 53 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_KawaseBlurDualFilter_LowSampleBlurEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] Passthrough ] ] ] SrcOver" },
/* 54 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_LinearEffect_BT2020_ITU_PQ__BT2020__false__UNKNOWN__Shader [ SolidColor ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] Src" },
/* 55 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ RE_MouriMap_TonemapEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] ] ColorSpaceTransformSRGB ] Src" },
/* 56 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"SolidColor Src" },
/* 57 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"SolidColor SrcOver" },
/* 58 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"SolidColor SrcOver AnalyticClip" },
/* 59 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"PerEdgeAAQuadRenderStep + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] Src" },
/* 60 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"VerticesRenderStep[TrisColor] + "
"Compose [ PrimitiveColor Compose [ GaussianColorFilter BlendCompose [ SolidColor Passthrough Modulate ] ] ] SrcOver" },
/* 61 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"AnalyticRRectRenderStep + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 62 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"AnalyticRRectRenderStep + "
"BlendCompose [ RE_LinearEffect_0x188a0000__DISPLAY_P3__false__0x90a0000__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 63 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"AnalyticRRectRenderStep + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 64 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"AnalyticRRectRenderStep + "
"RE_LinearEffect_0x188a0000__DISPLAY_P3__false__0x90a0000__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] SrcOver" },
/* 65 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"CoverBoundsRenderStep[InverseCover] + "
"(empty)" },
/* 66 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 67 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHIAAPAAAAAAAAAA) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 68 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ Compose [ BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] MatrixColorFilter ] Dither ] SrcOver" },
/* 69 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ Compose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] MatrixColorFilter ] Dither ] SrcOver" },
/* 70 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ LocalMatrix [ BlendCompose [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] RGBPaintColor DstIn ] ] MatrixColorFilter ] SrcOver" },
/* 71 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] Src" },
/* 72 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 73 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHIAAPAAAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 74 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"CoverBoundsRenderStep[NonAAFill] + "
"SolidColor SrcOver" },
/* 75 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"MiddleOutFanRenderStep[EvenOdd] + "
"(empty)" },
/* 76 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"TessellateCurvesRenderStep[EvenOdd] + "
"(empty)" },
/* 77 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"AnalyticRRectRenderStep + "
"Compose [ Compose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] MatrixColorFilter ] Dither ] SrcOver" },
/* 78 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[InverseCover] + "
"(empty)" },
/* 79 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ RE_LinearEffect_BT2020_ITU_PQ__BT2020__false__UNKNOWN__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kEwAAPcAAAAAAAAA) ] ColorSpaceTransform ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] Dither ] SrcOver" },
/* 80 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"MiddleOutFanRenderStep[EvenOdd] + "
"(empty)" },
/* 81 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"TessellateCurvesRenderStep[EvenOdd] + "
"(empty)" },
/* 82 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"VerticesRenderStep[TrisColor] + "
"Compose [ PrimitiveColor Compose [ GaussianColorFilter BlendCompose [ SolidColor Passthrough Modulate ] ] ] SrcOver" },
// New Cases 6/10/25
/* 83 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"TessellateWedgesRenderStep[EvenOdd] + "
"(empty)" },
/* 84 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[RegularCover] + "
"SolidColor SrcOver" },
/* 85 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"AnalyticBlurRenderStep + "
"SolidColor SrcOver" },
/* 86 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"AnalyticRRectRenderStep + "
"SolidColor SrcOver" },
/* 87 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHoAAO4AAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 88 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"AnalyticRRectRenderStep + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHoAAO4AAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 89 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"SolidColor SrcOver AnalyticClip" },
/* 90 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHoAAO4AAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver AnalyticClip" },
/* 91 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] SrcOver AnalyticClip" },
/* 92 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"SolidColor Src AnalyticClip" },
/* 93 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHoAAO4AAAAAAAAA) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 94 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"SolidColor Src AnalyticClip" },
/* 95 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] SrcOver AnalyticClip" },
//---------------------------------
// New Cases 6/17/25
/* 96 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_EdgeExtensionEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] ] SrcOver" },
/* 97 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ RE_EdgeExtensionEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] Passthrough ] ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 98 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ RE_EdgeExtensionEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 99 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"RE_BlurFilter_MixEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] ] Src" },
/* 100 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] Src" },
/* 101 */ { -1, "RP((R8+D16 x1).a000) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ BlendCompose [ Compose [ ImageShaderClamp(0) ColorSpaceTransformSRGB ] RGBPaintColor DstIn ] ] Src" },
/* */ { -1, "RP((RGBA16F+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_LinearEffect_UNKNOWN__SRGB__false__UNKNOWN__Shader [ RE_MouriMap_Tonemap [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kEwAAPcAAAAAAAAA) ] ColorSpaceTransform ] ] LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] Passthrough ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] SrcOver" },
/* 103 */ { -1, "RP((RGBA16F+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_LinearEffect_V0_SRGB__V0_SRGB__true__UNKNOWN__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] SrcOver" },
/* 104 */ { -1, "RP((RGBA16F+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_MouriMap_CrossTalkAndChunk16x16Effect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] ] Src" },
/* */ { -1, "RP((RGBA16F+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RuntimeEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] Src" },
/* 106 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] SrcOver AnalyticClip" },
/* 107 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"BlendCompose [ SolidColor LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] Plus ] SrcOver" },
/* 108 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"Compose [ Compose [ RE_LinearEffect_0x188a0000__V0_SRGB__true__0x9010000__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] MatrixColorFilter ] Dither ] SrcOver" },
/* 109 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"Compose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] MatrixColorFilter ] SrcOver" },
/* 110 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] SrcOver AnalyticClip" },
/* */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: gHoAAO4AAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 112 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"RE_EdgeExtensionEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] ] SrcOver" },
/* 113 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"RE_LinearEffect_0x188a0000__V0_SRGB__true__0x9010000__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] SrcOver" },
/* 114 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"RE_LinearEffect_V0_SRGB__V0_SRGB__true__UNKNOWN__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] SrcOver" },
/* */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"RE_LinearEffect_V0_SRGB__V0_SRGB__true__UNKNOWN__Shader [ RE_MouriMap_Tonemap [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] Passthrough ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] SrcOver" },
/* */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"AnalyticRRectRenderStep + "
"RuntimeEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] ] Src" },
/* 117 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ BlendCompose [ SolidColor LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] Plus ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 118 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHIAAPAAAAAAAAAA) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 119 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHoAAO4AAAAAAAAA) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 120 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ RE_LinearEffect_0x188a0000__DISPLAY_P3__false__0x90a0000__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] AlphaOnlyPaintColor SrcIn ] SrcOver AnalyticClip" },
/* */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ RuntimeEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] Passthrough ] ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 122 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ SolidColor LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] Plus ] SrcOver AnalyticClip" },
/* 123 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] MatrixColorFilter ] SrcOver" },
/* 124 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] MatrixColorFilter ] SrcOver AnalyticClip" },
/* */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ BlendCompose [ RuntimeEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kEwAAPcAAAAAAAAA) ] ColorSpaceTransform ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] AlphaOnlyPaintColor SrcIn ] Dither ] SrcOver" },
/* 126 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ Compose [ BlendCompose [ RE_EdgeExtensionEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] Passthrough ] ] ] AlphaOnlyPaintColor SrcIn ] MatrixColorFilter ] Dither ] SrcOver" },
/* */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ Compose [ LocalMatrix [ BlendCompose [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] RGBPaintColor DstIn ] ] MatrixColorFilter ] Dither ] SrcOver" },
/* 128 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] MatrixColorFilter ] SrcOver AnalyticClip" },
/* 129 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] MatrixColorFilter ] SrcOver" },
/* */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: gHMAAPAAAAAAAAAA) ] ColorSpaceTransformPremul ] ] MatrixColorFilter ] SrcOver" },
/* 131 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ RE_LinearEffect_0x188a0000__DISPLAY_P3__false__0x90a0000__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] MatrixColorFilter ] SrcOver AnalyticClip" },
/* */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: gHIAAPAAAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: gHoAAO4AAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 134 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHIAAO4AAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 135 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHIAAO4AAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver AnalyticClip" },
/* 136 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHIAAPAAAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver AnalyticClip" },
/* 137 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_EdgeExtensionEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] Passthrough ] ] ] SrcOver" },
/* 138 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_EdgeExtensionEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] Passthrough ] ] ] SrcOver AnalyticClip" },
/* 139 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_LinearEffect_0x188a0000__DISPLAY_P3__false__0x90a0000__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] SrcOver" },
/* 140 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_LinearEffect_0x188a0000__DISPLAY_P3__false__0x90a0000__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] SrcOver AnalyticClip" },
/* 141 */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_LinearEffect_UNKNOWN__SRGB__false__UNKNOWN__Shader [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] SrcOver" },
/* */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RuntimeEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHoAAO4AAAAAAAAA) ] Passthrough ] ] ] SrcOver" },
/* */ { -1, "RP((RGBA8+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RuntimeEffect [ SolidColor ColorSpaceTransformSRGB ColorSpaceTransformSRGB ] Src" },
//--
/* 144 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"CoverBoundsRenderStep[NonAAFill] + "
"SolidColor Src AnalyticClip" },
/* 145 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"VerticesRenderStep[TrisColor] + "
"Compose [ PrimitiveColor Compose [ GaussianColorFilter BlendCompose [ SolidColor Passthrough Modulate ] ] ] SrcOver" },
/* 146 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"AnalyticRRectRenderStep + "
"BlendCompose [ SolidColor LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] Plus ] SrcOver" },
/* */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"AnalyticRRectRenderStep + "
"Compose [ Compose [ BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] MatrixColorFilter ] Dither ] SrcOver" },
/* 148 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHoAAO4AAAAAAAAA) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 149 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHoAAO4AAAAAAAAA) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] SrcOver AnalyticClip" },
/* 150 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHIAAO4AAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 151 */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHIAAPAAAAAAAAAA) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[RegularCover] + "
"SolidColor SrcOver AnalyticClip" },
/* */ { -1, "RP((RGBA16F+D16 x1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"RE_LinearEffect_UNKNOWN__SRGB__false__UNKNOWN__Shader [ RE_MouriMap_TonemapEffect [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformSRGB ] ] LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] Passthrough ] ] ColorSpaceTransform ColorSpaceTransform ] ColorSpaceTransform ColorSpaceTransform ] SrcOver" },
// Synthetic placeholders for non-convex draw helpers. These labels are generated
// for the kNonSimpleShape DrawTypeFlags but don't appear in the naturally
// generated corpus. W/o them here the utilization check would fail.
/* N/A */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"MiddleOutFanRenderStep[Winding] + "
"(empty)" },
/* N/A */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"MiddleOutFanRenderStep[Winding] + "
"(empty)" },
/* N/A */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"TessellateCurvesRenderStep[Winding] + "
"(empty)" },
/* N/A */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"TessellateCurvesRenderStep[Winding] + "
"(empty)" },
/* N/A */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"TessellateWedgesRenderStep[Winding] + "
"(empty)" },
/* N/A */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"TessellateWedgesRenderStep[Winding] + "
"(empty)" },
/* N/A */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba w/ msaa load) + "
"TessellateWedgesRenderStep[EvenOdd] + "
"(empty)" },
// Synthetic placeholders to manage the unpredictability of the "w/ msaa load"
// string. On a device that doesn't generate labels with the "w/msaa load" string,
// kPrecompileCases which only handle such labels will run afoul of the minimum
// utilization check.
/* 61* */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"AnalyticRRectRenderStep + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 63* */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"AnalyticRRectRenderStep + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 66* */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 67* */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(3: kHIAAPAAAAAAAAAA) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] SrcOver" },
/* 68* */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ Compose [ BlendCompose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] AlphaOnlyPaintColor SrcIn ] MatrixColorFilter ] Dither ] SrcOver" },
/* 69* */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"Compose [ Compose [ LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] MatrixColorFilter ] Dither ] SrcOver" },
/* 71* */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] Src" },
/* 72* */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"LocalMatrix [ Compose [ CoordNormalize [ HardwareImage(0) ] ColorSpaceTransformPremul ] ] SrcOver" },
/* 74* */ { -1, "RP((RGBA8+D24_S8 x4->1).rgba) + "
"CoverBoundsRenderStep[NonAAFill] + "
"SolidColor SrcOver" },
};
bool skip(const char* str) {
#if !defined(SK_VULKAN)
if (strstr(str, "HardwareImage(3:")) {
return true;
}
#endif // SK_VULKAN
if (strstr(str, "RE_GainmapEffect")) {
return true;
}
return false;
}
// Find any duplicate Pipeline labels
[[maybe_unused]] void find_duplicates() {
for (size_t i = 0; i < std::size(kCases); ++i) {
for (size_t j = i+1; j < std::size(kCases); ++j) {
if (!strcmp(kCases[j].fString, kCases[i].fString)) {
SkDebugf("%zu is a duplicate of %zu\n", i, j);
}
}
}
}
// The pipeline strings were created with Android Vulkan but we're going to run the test
// on Dawn Metal and all the Native Vulkan configs
bool is_acceptable_context_type(skgpu::ContextType type) {
return type == skgpu::ContextType::kDawn_Metal ||
type == skgpu::ContextType::kVulkan;
}
} // anonymous namespace
// This test verifies that for each case in 'kPrecompileCases':
// 1) it covers some pipeline(s) in 'kCases'
// 2) more than 40% of the generated Precompile Pipelines are used (i.e., that over-generation
// isn't too out of control).
// Optionally, it can also:
// FINAL_REPORT: Print out a final report that includes missed cases in 'kCases'
// PRINT_COVERAGE: list the cases (in 'kCases') that are covered by each 'kPrecompileCases' case
// PRINT_GENERATED_LABELS: list the Pipeline labels for a specific 'kPrecompileCases' case
// Also of note, the "skip" method documents the Pipelines we're intentionally skipping and why.
DEF_GRAPHITE_TEST_FOR_CONTEXTS(AndroidPrecompileTest, is_acceptable_context_type,
reporter, context, /* testContext */, CtsEnforcement::kNever) {
using namespace skgpu::graphite;
//find_duplicates();
#if defined(SK_VULKAN)
// Use this call to map back from a HardwareImage sub-string to a VulkanYcbcrConversionInfo
//Base642YCbCr("kEwAAPcAAAAAAAAA");
#endif
std::unique_ptr<PrecompileContext> precompileContext = context->makePrecompileContext();
const skgpu::graphite::Caps* caps = precompileContext->priv().caps();
TextureInfo textureInfo = caps->getDefaultSampledTextureInfo(kBGRA_8888_SkColorType,
skgpu::Mipmapped::kNo,
skgpu::Protected::kNo,
skgpu::Renderable::kYes);
const bool msaaSupported =
caps->msaaRenderToSingleSampledSupport() ||
caps->isSampleCountSupported(TextureInfoPriv::ViewFormat(textureInfo),
caps->defaultMSAASamplesCount());
if (!msaaSupported) {
// The following pipelines rely on having MSAA
return;
}
#ifdef SK_ENABLE_VELLO_SHADERS
if (caps->computeSupport()) {
// The following pipelines rely on not utilizing Vello
return;
}
#endif
PipelineLabelInfoCollector collector({ kCases }, skip);
RuntimeEffectManager effectManager;
VisitPrecompileSettings(
precompileContext.get(),
effectManager,
[&](skgpu::graphite::PrecompileContext* precompileContext,
const PrecompileSettings& precompileCase,
int index) {
const skgpu::graphite::Caps* caps = precompileContext->priv().caps();
static const size_t kChosenCase = -1; // only test this entry in 'kPrecompileCases'
if (kChosenCase != -1 && kChosenCase != index) {
return;
}
if (caps->getDepthStencilFormat(DepthStencilFlags::kDepth) != TextureFormat::kD16) {
// The Pipeline labels in 'kCases' have "D16" for this case (i.e., "D32F" is a
// fine Depth buffer type but won't match the strings).
bool skip = false;
for (const RenderPassProperties& rpp : precompileCase.fRenderPassProps) {
if (rpp.fDSFlags == DepthStencilFlags::kDepth) {
skip = true;
}
}
if (skip) {
return;
}
}
SkSpan<const SkBlendMode> blendModes = precompileCase.fPaintOptions.getBlendModes();
bool skip = false;
for (SkBlendMode bm : blendModes) {
if (bm == SkBlendMode::kSrc && !caps->shaderCaps()->fDualSourceBlendingSupport) {
// The Pipeline labels were gathered on a device w/ dual source blending.
// kSrc blend mode w/o dual source blending can result in a dst read and, thus,
// break the string matching.
skip = true;
break;
}
}
if (skip) {
return;
}
RunTest(precompileContext, reporter, precompileCase, index,
{ kCases },
&collector);
});
#if defined(FINAL_REPORT)
// This block prints out a final report. This includes a list of the cases in 'kCases' that
// were not covered by the PaintOptions.
collector.finalReport();
#endif
}
#endif // SK_GRAPHITE