| Index: tests/GpuSampleLocationsTest.cpp
|
| diff --git a/tests/GpuSampleLocationsTest.cpp b/tests/GpuSampleLocationsTest.cpp
|
| index 5207c6b3ddfb29c6a5a423254f9af17531033d99..2a57ccbdccc83c246511f7acf10c44066a7a2e41 100644
|
| --- a/tests/GpuSampleLocationsTest.cpp
|
| +++ b/tests/GpuSampleLocationsTest.cpp
|
| @@ -12,7 +12,9 @@
|
|
|
| #if SK_SUPPORT_GPU
|
|
|
| +#include "GrRenderTargetContext.h"
|
| #include "GrRenderTargetPriv.h"
|
| +#include "GrPipelineBuilder.h"
|
| #include "gl/GrGLGpu.h"
|
| #include "gl/debug/DebugGLTestContext.h"
|
|
|
| @@ -87,23 +89,31 @@ public:
|
| virtual ~TestSampleLocationsInterface() {}
|
| };
|
|
|
| -GrRenderTarget* SK_WARN_UNUSED_RESULT create_render_target(GrContext* ctx, GrSurfaceOrigin origin,
|
| - int numSamples) {
|
| - GrSurfaceDesc desc;
|
| - desc.fFlags = kRenderTarget_GrSurfaceFlag;
|
| - desc.fOrigin = origin;
|
| - desc.fWidth = 100;
|
| - desc.fHeight = 100;
|
| - desc.fConfig = kBGRA_8888_GrPixelConfig;
|
| - desc.fSampleCnt = numSamples;
|
| - return ctx->textureProvider()->createTexture(desc, SkBudgeted::kNo, 0, 0)->asRenderTarget();
|
| +static GrPipeline* construct_dummy_pipeline(GrRenderTargetContext* dc, void* storage) {
|
| + GrPipelineBuilder dummyBuilder;
|
| + GrScissorState dummyScissor;
|
| + GrWindowRectsState dummyWindows;
|
| + GrXPOverridesForBatch dummyOverrides;
|
| +
|
| + GrPipeline::CreateArgs args;
|
| + args.fPipelineBuilder = &dummyBuilder;
|
| + args.fRenderTargetContext = dc;
|
| + args.fCaps = dc->caps();
|
| + args.fOpts = GrPipelineOptimizations();
|
| + args.fScissor = &dummyScissor;
|
| + args.fWindowRectsState = &dummyWindows;
|
| + args.fHasStencilClip = false;
|
| + args.fDstTexture = GrXferProcessor::DstTexture();
|
| +
|
| + GrPipeline::CreateAt(storage, args, &dummyOverrides);
|
| + return reinterpret_cast<GrPipeline*>(storage);
|
| }
|
|
|
| void assert_equal(skiatest::Reporter* reporter, const SamplePattern& pattern,
|
| const GrGpu::MultisampleSpecs& specs, bool flipY) {
|
| GrAlwaysAssert(specs.fSampleLocations);
|
| if ((int)pattern.size() != specs.fEffectiveSampleCnt) {
|
| - REPORTER_ASSERT_MESSAGE(reporter, false, "Sample pattern has wrong number of samples.");
|
| + REPORT_FAILURE(reporter, "", SkString("Sample pattern has wrong number of samples."));
|
| return;
|
| }
|
| for (int i = 0; i < specs.fEffectiveSampleCnt; ++i) {
|
| @@ -112,7 +122,7 @@ void assert_equal(skiatest::Reporter* reporter, const SamplePattern& pattern,
|
| expectedLocation.fY = 1 - expectedLocation.fY;
|
| }
|
| if (pattern[i] != expectedLocation) {
|
| - REPORTER_ASSERT_MESSAGE(reporter, false, "Sample pattern has wrong sample location.");
|
| + REPORT_FAILURE(reporter, "", SkString("Sample pattern has wrong sample location."));
|
| return;
|
| }
|
| }
|
| @@ -121,28 +131,37 @@ void assert_equal(skiatest::Reporter* reporter, const SamplePattern& pattern,
|
| void test_sampleLocations(skiatest::Reporter* reporter, TestSampleLocationsInterface* testInterface,
|
| GrContext* ctx) {
|
| SkRandom rand;
|
| - SkAutoTUnref<GrRenderTarget> bottomUps[numTestPatterns];
|
| - SkAutoTUnref<GrRenderTarget> topDowns[numTestPatterns];
|
| + sk_sp<GrRenderTargetContext> bottomUps[numTestPatterns];
|
| + sk_sp<GrRenderTargetContext> topDowns[numTestPatterns];
|
| for (int i = 0; i < numTestPatterns; ++i) {
|
| int numSamples = (int)kTestPatterns[i].size();
|
| GrAlwaysAssert(numSamples > 1 && SkIsPow2(numSamples));
|
| - bottomUps[i].reset(create_render_target(ctx, kBottomLeft_GrSurfaceOrigin,
|
| - rand.nextRangeU(1 + numSamples / 2, numSamples)));
|
| - topDowns[i].reset(create_render_target(ctx, kTopLeft_GrSurfaceOrigin,
|
| - rand.nextRangeU(1 + numSamples / 2, numSamples)));
|
| + bottomUps[i] = ctx->makeRenderTargetContextWithFallback(
|
| + SkBackingFit::kExact, 100, 100, kRGBA_8888_GrPixelConfig, nullptr,
|
| + rand.nextRangeU(1 + numSamples / 2, numSamples),
|
| + kBottomLeft_GrSurfaceOrigin);
|
| + topDowns[i] = ctx->makeRenderTargetContextWithFallback(
|
| + SkBackingFit::kExact, 100, 100, kRGBA_8888_GrPixelConfig, nullptr,
|
| + rand.nextRangeU(1 + numSamples / 2, numSamples),
|
| + kTopLeft_GrSurfaceOrigin);
|
| }
|
|
|
| // Ensure all sample locations get queried and/or cached properly.
|
| - GrStencilSettings dummyStencil;
|
| + SkAlignedSTStorage<1, GrPipeline> pipelineStorage;
|
| for (int repeat = 0; repeat < 2; ++repeat) {
|
| for (int i = 0; i < numTestPatterns; ++i) {
|
| testInterface->overrideSamplePattern(kTestPatterns[i]);
|
| - assert_equal(reporter, kTestPatterns[i],
|
| - topDowns[i]->renderTargetPriv().getMultisampleSpecs(dummyStencil), false);
|
| - assert_equal(reporter, kTestPatterns[i],
|
| - bottomUps[i]->renderTargetPriv().getMultisampleSpecs(dummyStencil), true);
|
| + for (GrRenderTargetContext* dc : {bottomUps[i].get(), topDowns[i].get()}) {
|
| + GrPipeline* dummyPipe = construct_dummy_pipeline(dc, pipelineStorage.get());
|
| + GrRenderTarget* rt = dc->accessRenderTarget();
|
| + assert_equal(reporter, kTestPatterns[i],
|
| + rt->renderTargetPriv().getMultisampleSpecs(*dummyPipe),
|
| + kBottomLeft_GrSurfaceOrigin == rt->origin());
|
| + dummyPipe->~GrPipeline();
|
| + }
|
| }
|
| }
|
| +
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|