/////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrPerlinNoise2Effect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrPerlinNoise2Effect::TestCreate(GrProcessorTestData* d) {
int numOctaves = d->fRandom->nextRangeU(2, 10);
bool stitchTiles = d->fRandom->nextBool();
GrTest::TestAsFPArgs asFPArgs(d);
return shader->asFragmentProcessor(asFPArgs.args());
}
+#endif
void GrGLPerlinNoise2::emitCode(EmitArgs& args) {
const GrPerlinNoise2Effect& pne = args.fFp.cast<GrPerlinNoise2Effect>();
/////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrImprovedPerlinNoiseEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrImprovedPerlinNoiseEffect::TestCreate(GrProcessorTestData* d) {
SkScalar baseFrequencyX = d->fRandom->nextRangeScalar(0.01f,
0.99f);
GrTest::TestAsFPArgs asFPArgs(d);
return shader->asFragmentProcessor(asFPArgs.args());
}
+#endif
void GrGLImprovedPerlinNoise::emitCode(EmitArgs& args) {
GrGLSLFragmentBuilder* fsBuilder = args.fFragBuilder;
#ifndef GrProcessorUnitTest_DEFINED
#define GrProcessorUnitTest_DEFINED
+#include "SkTypes.h"
+
+#if GR_TEST_UTILS
+
#include "../private/GrTextureProxy.h"
#include "../private/SkTArray.h"
#include "GrTestUtils.h"
-#include "SkTypes.h"
class SkMatrix;
class GrCaps;
const GrXPFactory* TestGet(GrProcessorTestData*)
#define GR_DEFINE_XP_FACTORY_TEST(X)
-#endif // !SK_ALLOW_STATIC_GLOBAL_INITIALIZERS
-#endif
+#endif // !SK_ALLOW_STATIC_GLOBAL_INITIALIZERS
+#else // GR_TEST_UTILS
+ #define GR_DECLARE_GEOMETRY_PROCESSOR_TEST
+ #define GR_DECLARE_FRAGMENT_PROCESSOR_TEST
+ #define GR_DECLARE_XP_FACTORY_TEST
+ #define GR_DEFINE_FRAGMENT_PROCESSOR_TEST(...)
+ #define GR_DEFINE_GEOMETRY_PROCESSOR_TEST(...)
+ #define GR_DEFINE_XP_FACTORY_TEST(...)
+ #define GR_DECLARE_FRAGMENT_PROCESSOR_TEST
+ #define GR_DEFINE_FRAGMENT_PROCESSOR_TEST(...)
+ #define GR_DECLARE_GEOMETRY_PROCESSOR_TEST
+ #define GR_DEFINE_GEOMETRY_PROCESSOR_TEST(...)
+ #define GR_DECLARE_XP_FACTORY_TEST
+ #define GR_DEFINE_XP_FACTORY_TEST(...)
+#endif // GR_TEST_UTILS
+#endif // GrProcessorUnitTest_DEFINED
#include "SkTypes.h"
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
#include "GrColor.h"
#include "GrColorSpaceXform.h"
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ColorMatrixEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> ColorMatrixEffect::TestCreate(GrProcessorTestData* d) {
SkScalar colorMatrix[20];
for (size_t i = 0; i < SK_ARRAY_COUNT(colorMatrix); ++i) {
}
return ColorMatrixEffect::Make(colorMatrix);
}
+#endif
sk_sp<GrFragmentProcessor> SkColorMatrixFilterRowMajor255::asFragmentProcessor(
GrContext*, SkColorSpace*) const {
#include "SkGr.h"
#include "effects/GrConstColorProcessor.h"
+#include "GrColorSpaceXform.h"
sk_sp<GrFragmentProcessor> SkColor4Shader::asFragmentProcessor(const AsFPArgs& args) const {
sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(fColorSpace.get(),
args.fDstColorSpace);
#include "SkReadBuffer.h"
#include "SkWriteBuffer.h"
#include "SkUtils.h"
+#include "SkRandom.h"
#include "SkString.h"
#include "SkValidationUtils.h"
#include "SkPM4f.h"
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrAlphaThresholdFragmentProcessor);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrAlphaThresholdFragmentProcessor::TestCreate(GrProcessorTestData* d) {
GrTexture* bmpTex = d->fTextures[GrProcessorUnitTest::kSkiaPMTextureIdx];
GrTexture* maskTex = d->fTextures[GrProcessorUnitTest::kAlphaTextureIdx];
innerThresh, outerThresh,
bounds);
}
+#endif
///////////////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrCircleBlurFragmentProcessor);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrCircleBlurFragmentProcessor::TestCreate(GrProcessorTestData* d) {
SkScalar wh = d->fRandom->nextRangeScalar(100.f, 1000.f);
SkScalar sigma = d->fRandom->nextRangeF(1.f,10.f);
SkRect circle = SkRect::MakeWH(wh, wh);
return GrCircleBlurFragmentProcessor::Make(d->fContext->textureProvider(), circle, sigma);
}
+#endif
#endif
};
}
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> ArithmeticFP::TestCreate(GrProcessorTestData* d) {
float k1 = d->fRandom->nextF();
float k2 = d->fRandom->nextF();
sk_sp<GrFragmentProcessor> dst(GrProcessorUnitTest::MakeChildFP(d));
return ArithmeticFP::Make(k1, k2, k3, k4, enforcePMColor, std::move(dst));
}
+#endif
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ArithmeticFP);
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrRectBlurEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrRectBlurEffect::TestCreate(GrProcessorTestData* d) {
float sigma = d->fRandom->nextRangeF(3,8);
float width = d->fRandom->nextRangeF(200,300);
return GrRectBlurEffect::Make(d->fContext->textureProvider(), SkRect::MakeWH(width, height),
sigma);
}
+#endif
bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrTextureProvider* texProvider,
GrRenderTargetContext* renderTargetContext,
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrRRectBlurEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrRRectBlurEffect::TestCreate(GrProcessorTestData* d) {
SkScalar w = d->fRandom->nextRangeScalar(100.f, 1000.f);
SkScalar h = d->fRandom->nextRangeScalar(100.f, 1000.f);
rrect.setRectXY(SkRect::MakeWH(w, h), r, r);
return GrRRectBlurEffect::Make(d->fContext, sigma, sigma, rrect, rrect);
}
+#endif
//////////////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrDisplacementMapEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrDisplacementMapEffect::TestCreate(GrProcessorTestData* d) {
int texIdxDispl = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
GrProcessorUnitTest::kAlphaTextureIdx;
d->fTextures[texIdxColor], colorSpaceXform,
colorDimensions);
}
+#endif
///////////////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrDiffuseLightingEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrDiffuseLightingEffect::TestCreate(GrProcessorTestData* d) {
int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
GrProcessorUnitTest::kAlphaTextureIdx;
return GrDiffuseLightingEffect::Make(tex, light.get(), surfaceScale, matrix, kd, mode,
&srcBounds);
}
+#endif
///////////////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSpecularLightingEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrSpecularLightingEffect::TestCreate(GrProcessorTestData* d) {
int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
GrProcessorUnitTest::kAlphaTextureIdx;
light.get(), surfaceScale, matrix, ks, shininess, mode,
&srcBounds);
}
+#endif
///////////////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMagnifierEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrMagnifierEffect::TestCreate(GrProcessorTestData* d) {
GrTexture* texture = d->fTextures[0];
const int kMaxWidth = 200;
SkASSERT(effect);
return effect;
}
+#endif
///////////////////////////////////////////////////////////////////////////////
#if SK_SUPPORT_GPU
#include "GrContext.h"
+#include "GrTextureProxy.h"
#include "effects/GrMatrixConvolutionEffect.h"
#endif
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMorphologyEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrMorphologyEffect::TestCreate(GrProcessorTestData* d) {
int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
GrProcessorUnitTest::kAlphaTextureIdx;
return GrMorphologyEffect::Make(d->fTextures[texIdx], dir, radius, type);
}
+#endif
static void apply_morphology_rect(GrTextureProvider* provider,
/////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrPerlinNoiseEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrPerlinNoiseEffect::TestCreate(GrProcessorTestData* d) {
int numOctaves = d->fRandom->nextRangeU(2, 10);
bool stitchTiles = d->fRandom->nextBool();
GrTest::TestAsFPArgs asFPArgs(d);
return shader->asFragmentProcessor(asFPArgs.args());
}
+#endif
void GrGLPerlinNoise::emitCode(EmitArgs& args) {
const GrPerlinNoiseEffect& pne = args.fFp.cast<GrPerlinNoiseEffect>();
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ColorTableEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> ColorTableEffect::TestCreate(GrProcessorTestData* d) {
int flags = 0;
uint8_t luts[256][4];
SkASSERT(fp);
return fp;
}
+#endif
sk_sp<GrFragmentProcessor> SkTable_ColorFilter::asFragmentProcessor(GrContext* context,
SkColorSpace*) const {
}
}
+#if GR_TEST_UTILS
GrGradientEffect::RandomGradientParams::RandomGradientParams(SkRandom* random) {
fColorCount = random->nextRangeU(1, kMaxRandomGradientColors);
fUseColors4f = random->nextBool();
}
fTileMode = static_cast<SkShader::TileMode>(random->nextULessThan(SkShader::kTileModeCount));
}
+#endif
#endif
protected:
GrGradientEffect(const CreateArgs&, bool isOpaque);
+ #if GR_TEST_UTILS
/** Helper struct that stores (and populates) parameters to construct a random gradient.
If fUseColors4f is true, then the SkColor4f factory should be called, with fColors4f and
fColorSpace. Otherwise, the SkColor factory should be called, with fColors. fColorCount
int fColorCount;
SkScalar* fStops;
};
+ #endif
bool onIsEqual(const GrFragmentProcessor&) const override;
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrLinearGradient);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrLinearGradient::TestCreate(GrProcessorTestData* d) {
SkPoint points[] = {{d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()},
{d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}};
GrAlwaysAssert(fp);
return fp;
}
+#endif
/////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrRadialGradient);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrRadialGradient::TestCreate(GrProcessorTestData* d) {
SkPoint center = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()};
SkScalar radius = d->fRandom->nextUScalar1();
GrAlwaysAssert(fp);
return fp;
}
+#endif
/////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSweepGradient);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrSweepGradient::TestCreate(GrProcessorTestData* d) {
SkPoint center = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()};
GrAlwaysAssert(fp);
return fp;
}
+#endif
/////////////////////////////////////////////////////////////////////
/*
* All Two point conical gradient test create functions may occasionally create edge case shaders
*/
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> Edge2PtConicalEffect::TestCreate(GrProcessorTestData* d) {
SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()};
SkScalar radius1 = d->fRandom->nextUScalar1();
GrAlwaysAssert(fp);
return fp;
}
+#endif
Edge2PtConicalEffect::GLSLEdge2PtConicalProcessor::GLSLEdge2PtConicalProcessor(const GrProcessor&)
: fVSVaryingName(nullptr)
/*
* All Two point conical gradient test create functions may occasionally create edge case shaders
*/
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> FocalOutside2PtConicalEffect::TestCreate(GrProcessorTestData* d) {
SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()};
SkScalar radius1 = 0.f;
GrAlwaysAssert(fp);
return fp;
}
+#endif
FocalOutside2PtConicalEffect::GLSLFocalOutside2PtConicalProcessor
::GLSLFocalOutside2PtConicalProcessor(const GrProcessor& processor)
/*
* All Two point conical gradient test create functions may occasionally create edge case shaders
*/
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> FocalInside2PtConicalEffect::TestCreate(GrProcessorTestData* d) {
SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()};
SkScalar radius1 = 0.f;
GrAlwaysAssert(fp);
return fp;
}
+#endif
FocalInside2PtConicalEffect::GLSLFocalInside2PtConicalProcessor
::GLSLFocalInside2PtConicalProcessor(const GrProcessor&)
/*
* All Two point conical gradient test create functions may occasionally create edge case shaders
*/
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> CircleInside2PtConicalEffect::TestCreate(GrProcessorTestData* d) {
SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()};
SkScalar radius1 = d->fRandom->nextUScalar1() + 0.0001f; // make sure radius1 != 0
GrAlwaysAssert(fp);
return fp;
}
+#endif
CircleInside2PtConicalEffect::GLSLCircleInside2PtConicalProcessor
::GLSLCircleInside2PtConicalProcessor(const GrProcessor& processor)
/*
* All Two point conical gradient test create functions may occasionally create edge case shaders
*/
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> CircleOutside2PtConicalEffect::TestCreate(GrProcessorTestData* d) {
SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()};
SkScalar radius1 = d->fRandom->nextUScalar1() + 0.0001f; // make sure radius1 != 0
GrAlwaysAssert(fp);
return fp;
}
+#endif
CircleOutside2PtConicalEffect::GLSLCircleOutside2PtConicalProcessor
::GLSLCircleOutside2PtConicalProcessor(const GrProcessor& processor)
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(DefaultGeoProc);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> DefaultGeoProc::TestCreate(GrProcessorTestData* d) {
uint32_t flags = 0;
if (d->fRandom->nextBool()) {
d->fRandom->nextBool(),
GrRandomCoverage(d->fRandom));
}
+#endif
sk_sp<GrGeometryProcessor> GrDefaultGeoProcFactory::Make(const Color& color,
const Coverage& coverage,
#include "SkRandom.h"
#include "SkTypes.h"
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
#define DRAW_OP_TEST_EXTERN(Op) \
extern std::unique_ptr<GrDrawOp> Op##__Test(SkRandom*, GrContext* context);
#include "GrTestUtils.h"
#include "SkRefCnt.h"
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
class GrDrawOp;
class GrContext;
#include "SkSpinlock.h"
#if SK_ALLOW_STATIC_GLOBAL_INITIALIZERS
-
+#if GR_TEST_UTILS
class GrFragmentProcessor;
class GrGeometryProcessor;
}
#endif
+#endif
// We use a global pool protected by a mutex(spinlock). Chrome may use the same GrContext on
#include "GrProcessorUnitTest.h"
#include "GrFragmentProcessor.h"
+#if GR_TEST_UTILS
+
sk_sp<GrFragmentProcessor> GrProcessorUnitTest::MakeChildFP(GrProcessorTestData* data) {
#if SK_ALLOW_STATIC_GLOBAL_INITIALIZERS
sk_sp<GrFragmentProcessor> fp;
return nullptr;
#endif
}
+#endif
#include "SkPath.h"
#include "SkRRect.h"
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
static const SkMatrix& test_matrix(SkRandom* random,
bool includeNonPerspective,
#include "GrGpuResourcePriv.h"
#include "GrRenderTargetContext.h"
#include "GrTexturePriv.h"
+#include "GrTextureProxy.h"
#include "GrTypes.h"
#include "GrXferProcessor.h"
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrConicEffect);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> GrConicEffect::TestCreate(GrProcessorTestData* d) {
sk_sp<GrGeometryProcessor> gp;
do {
} while (nullptr == gp);
return gp;
}
+#endif
//////////////////////////////////////////////////////////////////////////////
// Quad
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrQuadEffect);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> GrQuadEffect::TestCreate(GrProcessorTestData* d) {
sk_sp<GrGeometryProcessor> gp;
do {
} while (nullptr == gp);
return gp;
}
+#endif
//////////////////////////////////////////////////////////////////////////////
// Cubic
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrCubicEffect);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> GrCubicEffect::TestCreate(GrProcessorTestData* d) {
sk_sp<GrGeometryProcessor> gp;
do {
} while (nullptr == gp);
return gp;
}
+#endif
#include "GrBicubicEffect.h"
#include "GrInvariantOutput.h"
#include "GrProxyMove.h"
+#include "GrTextureProxy.h"
#include "glsl/GrGLSLColorSpaceXformHelper.h"
#include "glsl/GrGLSLFragmentShaderBuilder.h"
#include "glsl/GrGLSLProgramDataManager.h"
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrBicubicEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrBicubicEffect::TestCreate(GrProcessorTestData* d) {
int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
: GrProcessorUnitTest::kAlphaTextureIdx;
return GrBicubicEffect::Make(d->context(), d->textureProxy(texIdx), std::move(colorSpaceXform),
SkMatrix::I(), kClampClamp);
}
+#endif
//////////////////////////////////////////////////////////////////////////////
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrBitmapTextGeoProc);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> GrBitmapTextGeoProc::TestCreate(GrProcessorTestData* d) {
int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
: GrProcessorUnitTest::kAlphaTextureIdx;
format, GrTest::TestMatrix(d->fRandom),
d->fRandom->nextBool());
}
+#endif
#pragma optimize("t", off)
#endif
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrConfigConversionEffect::TestCreate(GrProcessorTestData* d) {
PMConversion pmConv = static_cast<PMConversion>(d->fRandom->nextULessThan(kPMConversionCnt));
GrSwizzle swizzle;
d->textureProxy(GrProcessorUnitTest::kSkiaPMTextureIdx),
swizzle, pmConv, GrTest::TestMatrix(d->fRandom)));
}
+#endif
#if !defined(__clang__) && _MSC_FULL_VER >= 190024213
// Restore optimization settings.
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrConstColorProcessor);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrConstColorProcessor::TestCreate(GrProcessorTestData* d) {
GrColor4f color;
int colorPicker = d->fRandom->nextULessThan(3);
InputMode mode = static_cast<InputMode>(d->fRandom->nextULessThan(kInputModeCnt));
return GrConstColorProcessor::Make(color, mode);
}
+#endif
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(AARectEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> AARectEffect::TestCreate(GrProcessorTestData* d) {
SkRect rect = SkRect::MakeLTRB(d->fRandom->nextSScalar1(),
d->fRandom->nextSScalar1(),
} while (nullptr == fp);
return fp;
}
+#endif
//////////////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrConvexPolyEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrConvexPolyEffect::TestCreate(GrProcessorTestData* d) {
int count = d->fRandom->nextULessThan(kMaxEdges) + 1;
SkScalar edges[kMaxEdges * 3];
} while (nullptr == fp);
return fp;
}
+#endif
GR_DEFINE_XP_FACTORY_TEST(GrCoverageSetOpXPFactory);
+#if GR_TEST_UTILS
const GrXPFactory* GrCoverageSetOpXPFactory::TestGet(GrProcessorTestData* d) {
SkRegion::Op regionOp = SkRegion::Op(d->fRandom->nextULessThan(SkRegion::kLastOp + 1));
bool invertCoverage = !d->fRenderTargetContext->hasMixedSamples() && d->fRandom->nextBool();
return GrCoverageSetOpXPFactory::Get(regionOp, invertCoverage);
}
+#endif
}
GR_DEFINE_XP_FACTORY_TEST(CustomXPFactory);
+#if GR_TEST_UTILS
const GrXPFactory* CustomXPFactory::TestGet(GrProcessorTestData* d) {
int mode = d->fRandom->nextRangeU((int)SkBlendMode::kLastCoeffMode + 1,
(int)SkBlendMode::kLastSeparableMode);
return GrCustomXfermode::Get((SkBlendMode)mode);
}
+#endif
///////////////////////////////////////////////////////////////////////////////
GR_DEFINE_XP_FACTORY_TEST(GrDisableColorXPFactory);
+#if GR_TEST_UTILS
const GrXPFactory* GrDisableColorXPFactory::TestGet(GrProcessorTestData*) {
return GrDisableColorXPFactory::Get();
}
+#endif
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldA8TextGeoProc);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> GrDistanceFieldA8TextGeoProc::TestCreate(GrProcessorTestData* d) {
int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
GrProcessorUnitTest::kAlphaTextureIdx;
flags,
d->fRandom->nextBool());
}
+#endif
///////////////////////////////////////////////////////////////////////////////
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldPathGeoProc);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> GrDistanceFieldPathGeoProc::TestCreate(GrProcessorTestData* d) {
int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
: GrProcessorUnitTest::kAlphaTextureIdx;
flags,
d->fRandom->nextBool());
}
+#endif
///////////////////////////////////////////////////////////////////////////////
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldLCDTextGeoProc);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> GrDistanceFieldLCDTextGeoProc::TestCreate(GrProcessorTestData* d) {
int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
GrProcessorUnitTest::kAlphaTextureIdx;
flags,
d->fRandom->nextBool());
}
+#endif
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(DitherEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> DitherEffect::TestCreate(GrProcessorTestData*) {
return DitherEffect::Make();
}
+#endif
//////////////////////////////////////////////////////////////////////////////
#include "GrGaussianConvolutionFragmentProcessor.h"
#include "GrProxyMove.h"
+#include "GrTextureProxy.h"
#include "../private/GrGLSL.h"
#include "glsl/GrGLSLFragmentProcessor.h"
#include "glsl/GrGLSLFragmentShaderBuilder.h"
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrGaussianConvolutionFragmentProcessor);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrGaussianConvolutionFragmentProcessor::TestCreate(
GrProcessorTestData* d) {
int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
return GrGaussianConvolutionFragmentProcessor::Make(
d->context(), d->textureProxy(texIdx), dir, radius, sigma, useBounds, bounds);
}
+#endif
* found in the LICENSE file.
*/
#include "GrMatrixConvolutionEffect.h"
+#include "GrTextureProxy.h"
#include "glsl/GrGLSLFragmentProcessor.h"
#include "glsl/GrGLSLFragmentShaderBuilder.h"
#include "glsl/GrGLSLProgramDataManager.h"
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMatrixConvolutionEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrMatrixConvolutionEffect::TestCreate(GrProcessorTestData* d) {
int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
GrProcessorUnitTest::kAlphaTextureIdx;
tileMode,
convolveAlpha);
}
+#endif
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> CircleEffect::TestCreate(GrProcessorTestData* d) {
SkPoint center;
center.fX = d->fRandom->nextRangeScalar(0.f, 1000.f);
} while (kHairlineAA_GrProcessorEdgeType == et);
return CircleEffect::Make(et, center, radius);
}
+#endif
//////////////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(EllipseEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> EllipseEffect::TestCreate(GrProcessorTestData* d) {
SkPoint center;
center.fX = d->fRandom->nextRangeScalar(0.f, 1000.f);
} while (kHairlineAA_GrProcessorEdgeType == et);
return EllipseEffect::Make(et, center, rx, ry);
}
+#endif
//////////////////////////////////////////////////////////////////////////////
GR_DEFINE_XP_FACTORY_TEST(GrPorterDuffXPFactory);
+#if GR_TEST_UTILS
const GrXPFactory* GrPorterDuffXPFactory::TestGet(GrProcessorTestData* d) {
SkBlendMode mode = SkBlendMode(d->fRandom->nextULessThan((int)SkBlendMode::kLastCoeffMode));
return GrPorterDuffXPFactory::Get(mode);
}
+#endif
void GrPorterDuffXPFactory::TestGetXPOutputTypes(const GrXferProcessor* xp,
int* outPrimary,
*outSecondary = blendFormula.fSecondaryOutputType;
}
-
////////////////////////////////////////////////////////////////////////////////////////////////
// SrcOver Global functions
////////////////////////////////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircularRRectEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> CircularRRectEffect::TestCreate(GrProcessorTestData* d) {
SkScalar w = d->fRandom->nextRangeScalar(20.f, 1000.f);
SkScalar h = d->fRandom->nextRangeScalar(20.f, 1000.f);
} while (nullptr == fp);
return fp;
}
+#endif
//////////////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(EllipticalRRectEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> EllipticalRRectEffect::TestCreate(GrProcessorTestData* d) {
SkScalar w = d->fRandom->nextRangeScalar(20.f, 1000.f);
SkScalar h = d->fRandom->nextRangeScalar(20.f, 1000.f);
} while (nullptr == fp);
return fp;
}
+#endif
//////////////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSRGBEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrSRGBEffect::TestCreate(GrProcessorTestData* d) {
Mode testMode = static_cast<Mode>(d->fRandom->nextRangeU(0, 1));
return sk_sp<GrFragmentProcessor>(new GrSRGBEffect(testMode));
}
+#endif
///////////////////////////////////////////////////////////////////////////////
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrRRectShadowGeoProc);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> GrRRectShadowGeoProc::TestCreate(GrProcessorTestData* d) {
return GrRRectShadowGeoProc::Make(GrTest::TestMatrix(d->fRandom));
}
+#endif
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSimpleTextureEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrSimpleTextureEffect::TestCreate(GrProcessorTestData* d) {
int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
: GrProcessorUnitTest::kAlphaTextureIdx;
return GrSimpleTextureEffect::Make(d->context(), d->textureProxy(texIdx),
std::move(colorSpaceXform), matrix);
}
+#endif
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrTextureDomainEffect);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrTextureDomainEffect::TestCreate(GrProcessorTestData* d) {
int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
: GrProcessorUnitTest::kAlphaTextureIdx;
bilerp ? GrSamplerParams::kBilerp_FilterMode
: GrSamplerParams::kNone_FilterMode);
}
+#endif
///////////////////////////////////////////////////////////////////////////////
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrDeviceSpaceTextureDecalFragmentProcessor);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> GrDeviceSpaceTextureDecalFragmentProcessor::TestCreate(
GrProcessorTestData* d) {
int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
return GrDeviceSpaceTextureDecalFragmentProcessor::Make(d->context(),
std::move(proxy), subset, pt);
}
+#endif
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ComposeTwoFragmentProcessor);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> ComposeTwoFragmentProcessor::TestCreate(GrProcessorTestData* d) {
// Create two random frag procs.
sk_sp<GrFragmentProcessor> fpA(GrProcessorUnitTest::MakeChildFP(d));
return sk_sp<GrFragmentProcessor>(
new ComposeTwoFragmentProcessor(std::move(fpA), std::move(fpB), mode));
}
+#endif
GrGLSLFragmentProcessor* ComposeTwoFragmentProcessor::onCreateGLSLInstance() const{
return new GLComposeTwoFragmentProcessor;
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ComposeOneFragmentProcessor);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> ComposeOneFragmentProcessor::TestCreate(GrProcessorTestData* d) {
// Create one random frag procs.
// For now, we'll prevent either children from being a shader with children to prevent the
ComposeOneFragmentProcessor::kSrc_Child;
return sk_sp<GrFragmentProcessor>(new ComposeOneFragmentProcessor(std::move(dst), mode, child));
}
+#endif
GrGLSLFragmentProcessor* ComposeOneFragmentProcessor::onCreateGLSLInstance() const {
return new GLComposeOneFragmentProcessor;
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(QuadEdgeEffect);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> QuadEdgeEffect::TestCreate(GrProcessorTestData* d) {
// Doesn't work without derivative instructions.
return d->fContext->caps()->shaderCaps()->shaderDerivativeSupport()
d->fRandom->nextBool())
: nullptr;
}
+#endif
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
DRAW_OP_TEST_DEFINE(AAConvexPathOp) {
GrColor color = GrRandomColor(random);
///////////////////////////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
struct PathTestStruct {
typedef GrAADistanceFieldPathRenderer::ShapeCache ShapeCache;
///////////////////////////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
#include "GrDrawOpTest.h"
///////////////////////////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
DRAW_OP_TEST_DEFINE(AAHairlineOp) {
GrColor color = GrRandomColor(random);
///////////////////////////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
DRAW_OP_TEST_DEFINE(AAFlatteningConvexPathOp) {
GrColor color = GrRandomColor(random);
#include "GrOpFlushState.h"
#include "GrResourceKey.h"
#include "GrResourceProvider.h"
+#include "SkStrokeRec.h"
GR_DECLARE_STATIC_UNIQUE_KEY(gMiterIndexBufferKey);
GR_DECLARE_STATIC_UNIQUE_KEY(gBevelIndexBufferKey);
///////////////////////////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
#include "GrDrawOpTest.h"
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(RectGeometryProcessor);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> RectGeometryProcessor::TestCreate(GrProcessorTestData* d) {
return sk_sp<GrGeometryProcessor>(new RectGeometryProcessor(GrTest::TestMatrix(d->fRandom)));
}
+#endif
///////////////////////////////////////////////////////////////////////////////
new AnalyticRectOp(color, viewMatrix, rect, croppedRect, bounds));
}
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
DRAW_OP_TEST_DEFINE(AnalyticRectOp) {
SkMatrix viewMatrix = GrTest::TestMatrix(random);
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(DashingCircleEffect);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> DashingCircleEffect::TestCreate(GrProcessorTestData* d) {
AAMode aaMode = static_cast<AAMode>(d->fRandom->nextULessThan(GrDashOp::kAAModeCnt));
return DashingCircleEffect::Make(GrRandomColor(d->fRandom),
aaMode, GrTest::TestMatrix(d->fRandom),
d->fRandom->nextBool());
}
+#endif
//////////////////////////////////////////////////////////////////////////////
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(DashingLineEffect);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> DashingLineEffect::TestCreate(GrProcessorTestData* d) {
AAMode aaMode = static_cast<AAMode>(d->fRandom->nextULessThan(GrDashOp::kAAModeCnt));
return DashingLineEffect::Make(GrRandomColor(d->fRandom),
aaMode, GrTest::TestMatrix(d->fRandom),
d->fRandom->nextBool());
}
+#endif
//////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
DRAW_OP_TEST_DEFINE(DashOp) {
GrColor color = GrRandomColor(random);
///////////////////////////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
DRAW_OP_TEST_DEFINE(DefaultPathOp) {
GrColor color = GrRandomColor(random);
return true;
}
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
static SkRSXform random_xform(SkRandom* random) {
static const SkScalar kMinExtent = -100.f;
///////////////////////////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
#include "GrDrawOpTest.h"
///////////////////////////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
#include "GrDrawOpTest.h"
///////////////////////////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
#include "GrDrawOpTest.h"
#include "GrDrawOpTest.h"
#include "GrMeshDrawOp.h"
#include "GrOpFlushState.h"
+#include "SkStrokeRec.h"
#include "SkRandom.h"
/* create a triangle strip that strokes the specified rect. There are 8
}
}
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
DRAW_OP_TEST_DEFINE(NonAAStrokeRectOp) {
SkMatrix viewMatrix = GrTest::TestMatrix(random);
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(CircleGeometryProcessor);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> CircleGeometryProcessor::TestCreate(GrProcessorTestData* d) {
return sk_sp<GrGeometryProcessor>(new CircleGeometryProcessor(
d->fRandom->nextBool(), d->fRandom->nextBool(), d->fRandom->nextBool(),
d->fRandom->nextBool(), GrTest::TestMatrix(d->fRandom)));
}
+#endif
///////////////////////////////////////////////////////////////////////////////
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(EllipseGeometryProcessor);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> EllipseGeometryProcessor::TestCreate(GrProcessorTestData* d) {
return sk_sp<GrGeometryProcessor>(
new EllipseGeometryProcessor(d->fRandom->nextBool(), GrTest::TestMatrix(d->fRandom)));
}
+#endif
///////////////////////////////////////////////////////////////////////////////
GR_DEFINE_GEOMETRY_PROCESSOR_TEST(DIEllipseGeometryProcessor);
+#if GR_TEST_UTILS
sk_sp<GrGeometryProcessor> DIEllipseGeometryProcessor::TestCreate(GrProcessorTestData* d) {
return sk_sp<GrGeometryProcessor>(new DIEllipseGeometryProcessor(
GrTest::TestMatrix(d->fRandom), (DIEllipseStyle)(d->fRandom->nextRangeU(0, 2))));
}
+#endif
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
DRAW_OP_TEST_DEFINE(CircleOp) {
do {
///////////////////////////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
DRAW_OP_TEST_DEFINE(PLSPathOp) {
GrColor color = GrRandomColor(random);
}
///////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
DRAW_OP_TEST_DEFINE(ShadowCircleOp) {
do {
///////////////////////////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
DRAW_OP_TEST_DEFINE(TesselatingPathOp) {
GrColor color = GrRandomColor(random);
///////////////////////////////////////////////////////////////////////////////////////////////////
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
DRAW_OP_TEST_DEFINE(TextBlobOp) {
static uint32_t gContextID = SK_InvalidGenID;
#include "GrTextUtils.h"
#include "SkTextBlobRunIterator.h"
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
#include "GrDrawOpTest.h"
#endif
sk_sp<const GrDistanceFieldAdjustTable> fDistanceAdjustTable;
-#ifdef GR_TEST_UTILS
+#if GR_TEST_UTILS
static const uint32_t kTextBlobOpScalerContextFlags =
SkPaint::kFakeGammaAndBoostContrast_ScalerContextFlags;
DRAW_OP_TEST_FRIEND(TextBlobOp);
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(BigKeyProcessor);
+#if GR_TEST_UTILS
sk_sp<GrFragmentProcessor> BigKeyProcessor::TestCreate(GrProcessorTestData*) {
return BigKeyProcessor::Make();
}
+#endif
//////////////////////////////////////////////////////////////////////////////
return renderTargetContext;
}
+#if GR_TEST_UTILS
static void set_random_xpf(GrPaint* paint, GrProcessorTestData* d) {
paint->setXPFactory(GrXPFactoryTestFactory::Get(d));
}
return &kDoesNotWriteStencil;
}
}
+#endif
+#if !GR_TEST_UTILS
+bool GrDrawingManager::ProgramUnitTest(GrContext*, int) { return true; }
+#else
bool GrDrawingManager::ProgramUnitTest(GrContext* context, int maxStages) {
GrDrawingManager* drawingManager = context->contextPriv().drawingManager();
return true;
}
+#endif
static int get_glprograms_max_stages(GrContext* context) {
GrGLGpu* gpu = static_cast<GrGLGpu*>(context->getGpu());
static GrColor4f texel_color4f(int i, int j) { return GrColor4f::FromGrColor(texel_color(i, j)); }
+#if GR_TEST_UTILS
DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ProcessorOptimizationValidationTest, reporter, ctxInfo) {
// This tests code under development but not used in skia lib. Leaving this disabled until
// some platform-specific issues are addressed.
}
}
}
-#endif
-
-#endif
+#endif // GR_TEST_UTILS
+#endif // SK_ALLOW_STATIC_GLOBAL_INITIALIZERS
+#endif // SK_SUPPORT_GPU