aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/GLProgramsTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/GLProgramsTest.cpp')
-rw-r--r--tests/GLProgramsTest.cpp61
1 files changed, 30 insertions, 31 deletions
diff --git a/tests/GLProgramsTest.cpp b/tests/GLProgramsTest.cpp
index 7ce71c6637..171ed61316 100644
--- a/tests/GLProgramsTest.cpp
+++ b/tests/GLProgramsTest.cpp
@@ -184,10 +184,10 @@ static sk_sp<GrDrawContext> random_draw_context(GrContext* context,
return drawContext;
}
-static void set_random_xpf(GrPipelineBuilder* pipelineBuilder, GrProcessorTestData* d) {
+static void set_random_xpf(GrPaint* paint, GrProcessorTestData* d) {
sk_sp<GrXPFactory> xpf(GrProcessorTestFactory<GrXPFactory>::Make(d));
SkASSERT(xpf);
- pipelineBuilder->setXPFactory(std::move(xpf));
+ paint->setXPFactory(std::move(xpf));
}
static sk_sp<GrFragmentProcessor> create_random_proc_tree(GrProcessorTestData* d,
@@ -236,8 +236,9 @@ static sk_sp<GrFragmentProcessor> create_random_proc_tree(GrProcessorTestData* d
return fp;
}
-static void set_random_color_coverage_stages(GrPipelineBuilder* pipelineBuilder,
- GrProcessorTestData* d, int maxStages) {
+static void set_random_color_coverage_stages(GrPaint* paint,
+ GrProcessorTestData* d,
+ int maxStages) {
// Randomly choose to either create a linear pipeline of procs or create one proc tree
const float procTreeProbability = 0.5f;
if (d->fRandom->nextF() < procTreeProbability) {
@@ -245,7 +246,7 @@ static void set_random_color_coverage_stages(GrPipelineBuilder* pipelineBuilder,
// processor key; maxTreeLevels should be a number from 1 to 4 inclusive.
const int maxTreeLevels = 4;
sk_sp<GrFragmentProcessor> fp(create_random_proc_tree(d, 2, maxTreeLevels));
- pipelineBuilder->addColorFragmentProcessor(std::move(fp));
+ paint->addColorFragmentProcessor(std::move(fp));
} else {
int numProcs = d->fRandom->nextULessThan(maxStages + 1);
int numColorProcs = d->fRandom->nextULessThan(numProcs + 1);
@@ -256,32 +257,30 @@ static void set_random_color_coverage_stages(GrPipelineBuilder* pipelineBuilder,
// finally add the stage to the correct pipeline in the drawstate
if (s < numColorProcs) {
- pipelineBuilder->addColorFragmentProcessor(std::move(fp));
+ paint->addColorFragmentProcessor(std::move(fp));
} else {
- pipelineBuilder->addCoverageFragmentProcessor(std::move(fp));
+ paint->addCoverageFragmentProcessor(std::move(fp));
}
++s;
}
}
}
-static void set_random_state(GrPipelineBuilder* pipelineBuilder,
- GrDrawContext* drawContext,
- SkRandom* random) {
- int state = 0;
- for (int i = 1; i <= GrPipelineBuilder::kLast_Flag; i <<= 1) {
- state |= random->nextBool() * i;
+static bool set_random_state(GrPaint* paint, SkRandom* random) {
+ if (random->nextBool()) {
+ paint->setDisableOutputConversionToSRGB(true);
}
-
- // If we don't have an MSAA rendertarget then we have to disable useHWAA
- if ((state | GrPipelineBuilder::kHWAntialias_Flag) && !drawContext->isUnifiedMultisampled()) {
- state &= ~GrPipelineBuilder::kHWAntialias_Flag;
+ if (random->nextBool()) {
+ paint->setAllowSRGBInputs(true);
+ }
+ if (random->nextBool()) {
+ paint->setAntiAlias(true);
}
- pipelineBuilder->enableState(state);
+ return random->nextBool();
}
// right now, the only thing we seem to care about in drawState's stencil is 'doesWrite()'
-static void set_random_stencil(GrPipelineBuilder* pipelineBuilder, SkRandom* random) {
+static const GrUserStencilSettings* get_random_stencil(SkRandom* random) {
static constexpr GrUserStencilSettings kDoesWriteStencil(
GrUserStencilSettings::StaticInit<
0xffff,
@@ -302,9 +301,9 @@ static void set_random_stencil(GrPipelineBuilder* pipelineBuilder, SkRandom* ran
);
if (random->nextBool()) {
- pipelineBuilder->setUserStencil(&kDoesWriteStencil);
+ return &kDoesWriteStencil;
} else {
- pipelineBuilder->setUserStencil(&kDoesNotWriteStencil);
+ return &kDoesNotWriteStencil;
}
}
@@ -346,19 +345,19 @@ bool GrDrawingManager::ProgramUnitTest(GrContext* context, int maxStages) {
return false;
}
- GrPipelineBuilder pipelineBuilder;
+ GrPaint grPaint;
SkAutoTUnref<GrDrawBatch> batch(GrRandomDrawBatch(&random, context));
SkASSERT(batch);
GrProcessorTestData ptd(&random, context, context->caps(),
drawContext.get(), dummyTextures);
- set_random_color_coverage_stages(&pipelineBuilder, &ptd, maxStages);
- set_random_xpf(&pipelineBuilder, &ptd);
- set_random_state(&pipelineBuilder, drawContext.get(), &random);
- set_random_stencil(&pipelineBuilder, &random);
+ set_random_color_coverage_stages(&grPaint, &ptd, maxStages);
+ set_random_xpf(&grPaint, &ptd);
+ bool snapToCenters = set_random_state(&grPaint, &random);
+ const GrUserStencilSettings* uss = get_random_stencil(&random);
- drawContext->drawContextPriv().testingOnly_drawBatch(pipelineBuilder, batch);
+ drawContext->drawContextPriv().testingOnly_drawBatch(grPaint, batch, uss, snapToCenters);
}
// Flush everything, test passes if flush is successful(ie, no asserts are hit, no crashes)
drawingManager->flush();
@@ -381,16 +380,16 @@ bool GrDrawingManager::ProgramUnitTest(GrContext* context, int maxStages) {
SkASSERT(batch);
GrProcessorTestData ptd(&random, context, context->caps(),
drawContext.get(), dummyTextures);
- GrPipelineBuilder builder;
- builder.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::kSrc_Mode));
+ GrPaint grPaint;
+ grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::kSrc_Mode));
sk_sp<GrFragmentProcessor> fp(
GrProcessorTestFactory<GrFragmentProcessor>::MakeIdx(i, &ptd));
sk_sp<GrFragmentProcessor> blockFP(
BlockInputFragmentProcessor::Make(std::move(fp)));
- builder.addColorFragmentProcessor(std::move(blockFP));
+ grPaint.addColorFragmentProcessor(std::move(blockFP));
- drawContext->drawContextPriv().testingOnly_drawBatch(builder, batch);
+ drawContext->drawContextPriv().testingOnly_drawBatch(grPaint, batch);
drawingManager->flush();
}
}