GrGeometryProcessor* GrDistanceFieldLCDTextGeoProc::TestCreate(SkRandom* random, GrContext*, const GrCaps&, GrTexture* textures[]) { int texIdx = random->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; static const SkShader::TileMode kTileModes[] = { SkShader::kClamp_TileMode, SkShader::kRepeat_TileMode, SkShader::kMirror_TileMode, }; SkShader::TileMode tileModes[] = { kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], }; GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBilerp_FilterMode : GrTextureParams::kNone_FilterMode); DistanceAdjust wa = { 0.0f, 0.1f, -0.1f }; uint32_t flags = kUseLCD_DistanceFieldEffectFlag; flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(random), GrTest::TestMatrix(random), textures[texIdx], params, wa, flags, random->nextBool()); }
const GrGeometryProcessor* GrDistanceFieldLCDTextGeoProc::TestCreate(GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; static const SkShader::TileMode kTileModes[] = { SkShader::kClamp_TileMode, SkShader::kRepeat_TileMode, SkShader::kMirror_TileMode, }; SkShader::TileMode tileModes[] = { kTileModes[d->fRandom->nextULessThan(SK_ARRAY_COUNT(kTileModes))], kTileModes[d->fRandom->nextULessThan(SK_ARRAY_COUNT(kTileModes))], }; GrTextureParams params(tileModes, d->fRandom->nextBool() ? GrTextureParams::kBilerp_FilterMode : GrTextureParams::kNone_FilterMode); DistanceAdjust wa = { 0.0f, 0.1f, -0.1f }; uint32_t flags = kUseLCD_DistanceFieldEffectFlag; flags |= d->fRandom->nextBool() ? kSimilarity_DistanceFieldEffectFlag : 0; if (flags & kSimilarity_DistanceFieldEffectFlag) { flags |= d->fRandom->nextBool() ? kScaleOnly_DistanceFieldEffectFlag : 0; } flags |= d->fRandom->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(d->fRandom), GrTest::TestMatrix(d->fRandom), d->fTextures[texIdx], params, wa, flags, d->fRandom->nextBool()); }
GrGeometryProcessor* GrDistanceFieldPathGeoProc::TestCreate(SkRandom* random, GrContext*, const GrCaps&, GrTexture* textures[]) { int texIdx = random->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; static const SkShader::TileMode kTileModes[] = { SkShader::kClamp_TileMode, SkShader::kRepeat_TileMode, SkShader::kMirror_TileMode, }; SkShader::TileMode tileModes[] = { kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], }; GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBilerp_FilterMode : GrTextureParams::kNone_FilterMode); return GrDistanceFieldPathGeoProc::Create(GrRandomColor(random), GrTest::TestMatrix(random), textures[texIdx], params, random->nextBool() ? kSimilarity_DistanceFieldEffectFlag : 0, random->nextBool()); }
const GrGeometryProcessor* GrBitmapTextGeoProc::TestCreate(GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; static const SkShader::TileMode kTileModes[] = { SkShader::kClamp_TileMode, SkShader::kRepeat_TileMode, SkShader::kMirror_TileMode, }; SkShader::TileMode tileModes[] = { kTileModes[d->fRandom->nextULessThan(SK_ARRAY_COUNT(kTileModes))], kTileModes[d->fRandom->nextULessThan(SK_ARRAY_COUNT(kTileModes))], }; GrTextureParams params(tileModes, d->fRandom->nextBool() ? GrTextureParams::kBilerp_FilterMode : GrTextureParams::kNone_FilterMode); GrMaskFormat format; switch (d->fRandom->nextULessThan(3)) { case 0: format = kA8_GrMaskFormat; break; case 1: format = kA565_GrMaskFormat; break; case 2: format = kARGB_GrMaskFormat; break; } return GrBitmapTextGeoProc::Create(GrRandomColor(d->fRandom), d->fTextures[texIdx], params, format, GrTest::TestMatrix(d->fRandom), d->fRandom->nextBool()); }
const GrGeometryProcessor* GrDistanceFieldA8TextGeoProc::TestCreate(GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; static const SkShader::TileMode kTileModes[] = { SkShader::kClamp_TileMode, SkShader::kRepeat_TileMode, SkShader::kMirror_TileMode, }; SkShader::TileMode tileModes[] = { kTileModes[d->fRandom->nextULessThan(SK_ARRAY_COUNT(kTileModes))], kTileModes[d->fRandom->nextULessThan(SK_ARRAY_COUNT(kTileModes))], }; GrTextureParams params(tileModes, d->fRandom->nextBool() ? GrTextureParams::kBilerp_FilterMode : GrTextureParams::kNone_FilterMode); uint32_t flags = 0; flags |= d->fRandom->nextBool() ? kSimilarity_DistanceFieldEffectFlag : 0; if (flags & kSimilarity_DistanceFieldEffectFlag) { flags |= d->fRandom->nextBool() ? kScaleOnly_DistanceFieldEffectFlag : 0; } return GrDistanceFieldA8TextGeoProc::Create(GrRandomColor(d->fRandom), GrTest::TestMatrix(d->fRandom), d->fTextures[texIdx], params, #ifdef SK_GAMMA_APPLY_TO_A8 d->fRandom->nextF(), #endif flags, d->fRandom->nextBool()); }
sk_sp<GrGeometryProcessor> GrBitmapTextGeoProc::TestCreate(GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; sk_sp<GrTextureProxy> proxies[kMaxTextures] = { d->textureProxy(texIdx), nullptr, nullptr, nullptr }; GrSamplerState::WrapMode wrapModes[2]; GrTest::TestWrapModes(d->fRandom, wrapModes); GrSamplerState samplerState(wrapModes, d->fRandom->nextBool() ? GrSamplerState::Filter::kBilerp : GrSamplerState::Filter::kNearest); GrMaskFormat format = kARGB_GrMaskFormat; // init to avoid warning switch (d->fRandom->nextULessThan(3)) { case 0: format = kA8_GrMaskFormat; break; case 1: format = kA565_GrMaskFormat; break; case 2: format = kARGB_GrMaskFormat; break; } return GrBitmapTextGeoProc::Make(*d->caps()->shaderCaps(), GrRandomColor(d->fRandom), proxies, 1, samplerState, format, GrTest::TestMatrix(d->fRandom), d->fRandom->nextBool()); }
GrGeometryProcessor* QuadEdgeEffect::TestCreate(SkRandom* random, GrContext*, const GrDrawTargetCaps& caps, GrTexture*[]) { // Doesn't work without derivative instructions. return caps.shaderCaps()->shaderDerivativeSupport() ? QuadEdgeEffect::Create(GrRandomColor(random), GrTest::TestMatrix(random)) : NULL; }
sk_sp<GrGeometryProcessor> GrCubicEffect::TestCreate(GrProcessorTestData* d) { sk_sp<GrGeometryProcessor> gp; do { GrPrimitiveEdgeType edgeType = static_cast<GrPrimitiveEdgeType>( d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt)); gp = GrCubicEffect::Make(GrRandomColor(d->fRandom), GrTest::TestMatrix(d->fRandom), edgeType, *d->caps()); } while (nullptr == gp); return gp; }
const GrGeometryProcessor* GrConicEffect::TestCreate(GrProcessorTestData* d) { GrGeometryProcessor* gp; do { GrPrimitiveEdgeType edgeType = static_cast<GrPrimitiveEdgeType>( d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt)); gp = GrConicEffect::Create(GrRandomColor(d->fRandom), GrTest::TestMatrix(d->fRandom), edgeType, *d->fCaps, GrTest::TestMatrix(d->fRandom), d->fRandom->nextBool()); } while (nullptr == gp); return gp; }
GrGeometryProcessor* GrCubicEffect::TestCreate(SkRandom* random, GrContext*, const GrDrawTargetCaps& caps, GrTexture*[]) { GrGeometryProcessor* gp; do { GrPrimitiveEdgeType edgeType = static_cast<GrPrimitiveEdgeType>( random->nextULessThan(kGrProcessorEdgeTypeCnt)); gp = GrCubicEffect::Create(GrRandomColor(random), GrTest::TestMatrix(random), edgeType, caps); } while (NULL == gp); return gp; }
static void randomize_params(size_t count, size_t maxVertex, SkScalar min, SkScalar max, SkRandom* random, SkTArray<SkPoint>* positions, SkTArray<SkPoint>* texCoords, bool hasTexCoords, SkTArray<uint32_t>* colors, bool hasColors, SkTArray<uint16_t>* indices, bool hasIndices) { for (uint32_t v = 0; v < count; v++) { positions->push_back(random_point(random, min, max)); if (hasTexCoords) { texCoords->push_back(random_point(random, min, max)); } if (hasColors) { colors->push_back(GrRandomColor(random)); } if (hasIndices) { SkASSERT(maxVertex <= UINT16_MAX); indices->push_back(random->nextULessThan((uint16_t)maxVertex)); } } }
sk_sp<GrGeometryProcessor> DefaultGeoProc::TestCreate(GrProcessorTestData* d) { uint32_t flags = 0; if (d->fRandom->nextBool()) { flags |= kColorAttribute_GPFlag; } if (d->fRandom->nextBool()) { flags |= kColorAttributeIsSkColor_GPFlag; } if (d->fRandom->nextBool()) { flags |= kCoverageAttribute_GPFlag; } if (d->fRandom->nextBool()) { flags |= kLocalCoordAttribute_GPFlag; } return DefaultGeoProc::Make(flags, GrRandomColor(d->fRandom), GrTest::TestColorXform(d->fRandom), GrTest::TestMatrix(d->fRandom), GrTest::TestMatrix(d->fRandom), d->fRandom->nextBool(), GrRandomCoverage(d->fRandom)); }
const GrGeometryProcessor* DefaultGeoProc::TestCreate(GrProcessorTestData* d) { uint32_t flags = 0; if (d->fRandom->nextBool()) { flags |= kColor_GPFlag; } if (d->fRandom->nextBool()) { flags |= kCoverage_GPFlag; } if (d->fRandom->nextBool()) { flags |= kLocalCoord_GPFlag; } if (d->fRandom->nextBool()) { flags |= kTransformedLocalCoord_GPFlag; } return DefaultGeoProc::Create(flags, GrRandomColor(d->fRandom), GrTest::TestMatrix(d->fRandom), GrTest::TestMatrix(d->fRandom), d->fRandom->nextBool(), d->fRandom->nextBool(), GrRandomCoverage(d->fRandom)); }
GrGeometryProcessor* GrBitmapTextGeoProc::TestCreate(SkRandom* random, GrContext*, const GrDrawTargetCaps&, GrTexture* textures[]) { int texIdx = random->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; static const SkShader::TileMode kTileModes[] = { SkShader::kClamp_TileMode, SkShader::kRepeat_TileMode, SkShader::kMirror_TileMode, }; SkShader::TileMode tileModes[] = { kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], }; GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBilerp_FilterMode : GrTextureParams::kNone_FilterMode); GrMaskFormat format; switch (random->nextULessThan(3)) { default: SkFAIL("Incomplete enum\n"); case 0: format = kA8_GrMaskFormat; break; case 1: format = kA565_GrMaskFormat; break; case 2: format = kARGB_GrMaskFormat; break; } return GrBitmapTextGeoProc::Create(GrRandomColor(random), textures[texIdx], params, format, random->nextBool(), GrProcessorUnitTest::TestMatrix(random)); }