Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(49)

Side by Side Diff: tests/GpuSampleLocationsTest.cpp

Issue 2468653002: Remove GrStencilSettings from GrPipeline (Closed)
Patch Set: Remove GrStencilSettings from GrPipeline Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/vk/GrVkResourceProvider.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2016 Google Inc. 2 * Copyright 2016 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkTypes.h" 8 #include "SkTypes.h"
9 #include "SkPoint.h" 9 #include "SkPoint.h"
10 #include "Test.h" 10 #include "Test.h"
11 #include <vector> 11 #include <vector>
12 12
13 #if SK_SUPPORT_GPU 13 #if SK_SUPPORT_GPU
14 14
15 #include "GrRenderTargetContext.h"
15 #include "GrRenderTargetPriv.h" 16 #include "GrRenderTargetPriv.h"
17 #include "GrPipelineBuilder.h"
16 #include "gl/GrGLGpu.h" 18 #include "gl/GrGLGpu.h"
17 #include "gl/debug/DebugGLTestContext.h" 19 #include "gl/debug/DebugGLTestContext.h"
18 20
19 typedef std::vector<SkPoint> SamplePattern; 21 typedef std::vector<SkPoint> SamplePattern;
20 22
21 static const SamplePattern kTestPatterns[] = { 23 static const SamplePattern kTestPatterns[] = {
22 SamplePattern{ // Intel on mac, msaa8, offscreen. 24 SamplePattern{ // Intel on mac, msaa8, offscreen.
23 {0.562500, 0.312500}, 25 {0.562500, 0.312500},
24 {0.437500, 0.687500}, 26 {0.437500, 0.687500},
25 {0.812500, 0.562500}, 27 {0.812500, 0.562500},
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 } 82 }
81 }; 83 };
82 constexpr int numTestPatterns = SK_ARRAY_COUNT(kTestPatterns); 84 constexpr int numTestPatterns = SK_ARRAY_COUNT(kTestPatterns);
83 85
84 class TestSampleLocationsInterface : public SkNoncopyable { 86 class TestSampleLocationsInterface : public SkNoncopyable {
85 public: 87 public:
86 virtual void overrideSamplePattern(const SamplePattern&) = 0; 88 virtual void overrideSamplePattern(const SamplePattern&) = 0;
87 virtual ~TestSampleLocationsInterface() {} 89 virtual ~TestSampleLocationsInterface() {}
88 }; 90 };
89 91
90 GrRenderTarget* SK_WARN_UNUSED_RESULT create_render_target(GrContext* ctx, GrSur faceOrigin origin, 92 static GrPipeline* construct_dummy_pipeline(GrRenderTargetContext* dc, void* sto rage) {
91 int numSamples) { 93 GrPipelineBuilder dummyBuilder;
92 GrSurfaceDesc desc; 94 GrScissorState dummyScissor;
93 desc.fFlags = kRenderTarget_GrSurfaceFlag; 95 GrWindowRectsState dummyWindows;
94 desc.fOrigin = origin; 96 GrXPOverridesForBatch dummyOverrides;
95 desc.fWidth = 100; 97
96 desc.fHeight = 100; 98 GrPipeline::CreateArgs args;
97 desc.fConfig = kBGRA_8888_GrPixelConfig; 99 args.fPipelineBuilder = &dummyBuilder;
98 desc.fSampleCnt = numSamples; 100 args.fRenderTargetContext = dc;
99 return ctx->textureProvider()->createTexture(desc, SkBudgeted::kNo, 0, 0)->a sRenderTarget(); 101 args.fCaps = dc->caps();
102 args.fOpts = GrPipelineOptimizations();
103 args.fScissor = &dummyScissor;
104 args.fWindowRectsState = &dummyWindows;
105 args.fHasStencilClip = false;
106 args.fDstTexture = GrXferProcessor::DstTexture();
107
108 GrPipeline::CreateAt(storage, args, &dummyOverrides);
109 return reinterpret_cast<GrPipeline*>(storage);
100 } 110 }
101 111
102 void assert_equal(skiatest::Reporter* reporter, const SamplePattern& pattern, 112 void assert_equal(skiatest::Reporter* reporter, const SamplePattern& pattern,
103 const GrGpu::MultisampleSpecs& specs, bool flipY) { 113 const GrGpu::MultisampleSpecs& specs, bool flipY) {
104 GrAlwaysAssert(specs.fSampleLocations); 114 GrAlwaysAssert(specs.fSampleLocations);
105 if ((int)pattern.size() != specs.fEffectiveSampleCnt) { 115 if ((int)pattern.size() != specs.fEffectiveSampleCnt) {
106 REPORTER_ASSERT_MESSAGE(reporter, false, "Sample pattern has wrong numbe r of samples."); 116 REPORT_FAILURE(reporter, "", SkString("Sample pattern has wrong number o f samples."));
107 return; 117 return;
108 } 118 }
109 for (int i = 0; i < specs.fEffectiveSampleCnt; ++i) { 119 for (int i = 0; i < specs.fEffectiveSampleCnt; ++i) {
110 SkPoint expectedLocation = specs.fSampleLocations[i]; 120 SkPoint expectedLocation = specs.fSampleLocations[i];
111 if (flipY) { 121 if (flipY) {
112 expectedLocation.fY = 1 - expectedLocation.fY; 122 expectedLocation.fY = 1 - expectedLocation.fY;
113 } 123 }
114 if (pattern[i] != expectedLocation) { 124 if (pattern[i] != expectedLocation) {
115 REPORTER_ASSERT_MESSAGE(reporter, false, "Sample pattern has wrong s ample location."); 125 REPORT_FAILURE(reporter, "", SkString("Sample pattern has wrong samp le location."));
116 return; 126 return;
117 } 127 }
118 } 128 }
119 } 129 }
120 130
121 void test_sampleLocations(skiatest::Reporter* reporter, TestSampleLocationsInter face* testInterface, 131 void test_sampleLocations(skiatest::Reporter* reporter, TestSampleLocationsInter face* testInterface,
122 GrContext* ctx) { 132 GrContext* ctx) {
123 SkRandom rand; 133 SkRandom rand;
124 SkAutoTUnref<GrRenderTarget> bottomUps[numTestPatterns]; 134 sk_sp<GrRenderTargetContext> bottomUps[numTestPatterns];
125 SkAutoTUnref<GrRenderTarget> topDowns[numTestPatterns]; 135 sk_sp<GrRenderTargetContext> topDowns[numTestPatterns];
126 for (int i = 0; i < numTestPatterns; ++i) { 136 for (int i = 0; i < numTestPatterns; ++i) {
127 int numSamples = (int)kTestPatterns[i].size(); 137 int numSamples = (int)kTestPatterns[i].size();
128 GrAlwaysAssert(numSamples > 1 && SkIsPow2(numSamples)); 138 GrAlwaysAssert(numSamples > 1 && SkIsPow2(numSamples));
129 bottomUps[i].reset(create_render_target(ctx, kBottomLeft_GrSurfaceOrigin , 139 bottomUps[i] = ctx->makeRenderTargetContextWithFallback(
130 rand.nextRangeU(1 + numSamples / 2, numSamples))); 140 SkBackingFit::kExact, 100, 100, kRGBA_8888_GrPixelCon fig, nullptr,
131 topDowns[i].reset(create_render_target(ctx, kTopLeft_GrSurfaceOrigin, 141 rand.nextRangeU(1 + numSamples / 2, numSamples),
132 rand.nextRangeU(1 + numSamples / 2, numSamples))); 142 kBottomLeft_GrSurfaceOrigin);
143 topDowns[i] = ctx->makeRenderTargetContextWithFallback(
144 SkBackingFit::kExact, 100, 100, kRGBA_8888_GrPixelConf ig, nullptr,
145 rand.nextRangeU(1 + numSamples / 2, numSamples),
146 kTopLeft_GrSurfaceOrigin);
133 } 147 }
134 148
135 // Ensure all sample locations get queried and/or cached properly. 149 // Ensure all sample locations get queried and/or cached properly.
136 GrStencilSettings dummyStencil; 150 SkAlignedSTStorage<1, GrPipeline> pipelineStorage;
137 for (int repeat = 0; repeat < 2; ++repeat) { 151 for (int repeat = 0; repeat < 2; ++repeat) {
138 for (int i = 0; i < numTestPatterns; ++i) { 152 for (int i = 0; i < numTestPatterns; ++i) {
139 testInterface->overrideSamplePattern(kTestPatterns[i]); 153 testInterface->overrideSamplePattern(kTestPatterns[i]);
140 assert_equal(reporter, kTestPatterns[i], 154 for (GrRenderTargetContext* dc : {bottomUps[i].get(), topDowns[i].ge t()}) {
141 topDowns[i]->renderTargetPriv().getMultisampleSpecs(dum myStencil), false); 155 GrPipeline* dummyPipe = construct_dummy_pipeline(dc, pipelineSto rage.get());
142 assert_equal(reporter, kTestPatterns[i], 156 GrRenderTarget* rt = dc->accessRenderTarget();
143 bottomUps[i]->renderTargetPriv().getMultisampleSpecs(du mmyStencil), true); 157 assert_equal(reporter, kTestPatterns[i],
158 rt->renderTargetPriv().getMultisampleSpecs(*dummyPi pe),
159 kBottomLeft_GrSurfaceOrigin == rt->origin());
160 dummyPipe->~GrPipeline();
161 }
144 } 162 }
145 } 163 }
164
146 } 165 }
147 166
148 //////////////////////////////////////////////////////////////////////////////// //////////////////// 167 //////////////////////////////////////////////////////////////////////////////// ////////////////////
149 168
150 class GLTestSampleLocationsInterface : public TestSampleLocationsInterface, publ ic GrGLInterface { 169 class GLTestSampleLocationsInterface : public TestSampleLocationsInterface, publ ic GrGLInterface {
151 public: 170 public:
152 GLTestSampleLocationsInterface() : fTestContext(sk_gpu_test::CreateDebugGLTe stContext()) { 171 GLTestSampleLocationsInterface() : fTestContext(sk_gpu_test::CreateDebugGLTe stContext()) {
153 fStandard = fTestContext->gl()->fStandard; 172 fStandard = fTestContext->gl()->fStandard;
154 fExtensions = fTestContext->gl()->fExtensions; 173 fExtensions = fTestContext->gl()->fExtensions;
155 fFunctions = fTestContext->gl()->fFunctions; 174 fFunctions = fTestContext->gl()->fFunctions;
(...skipping 28 matching lines...) Expand all
184 SamplePattern fSamplePattern; 203 SamplePattern fSamplePattern;
185 }; 204 };
186 205
187 DEF_GPUTEST(GLSampleLocations, reporter, /*factory*/) { 206 DEF_GPUTEST(GLSampleLocations, reporter, /*factory*/) {
188 GLTestSampleLocationsInterface testInterface; 207 GLTestSampleLocationsInterface testInterface;
189 SkAutoTUnref<GrContext> ctx(GrContext::Create(kOpenGL_GrBackend, testInterfa ce)); 208 SkAutoTUnref<GrContext> ctx(GrContext::Create(kOpenGL_GrBackend, testInterfa ce));
190 test_sampleLocations(reporter, &testInterface, ctx); 209 test_sampleLocations(reporter, &testInterface, ctx);
191 } 210 }
192 211
193 #endif 212 #endif
OLDNEW
« no previous file with comments | « src/gpu/vk/GrVkResourceProvider.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698