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

Side by Side Diff: src/gpu/GrAARectRenderer.cpp

Issue 1109153004: Initial CL to create GrBatchTest infrastructure (Closed) Base URL: https://skia.googlesource.com/skia.git@rand-batch0
Patch Set: rebase onto master Created 5 years, 7 months 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
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 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 "GrAARectRenderer.h" 8 #include "GrAARectRenderer.h"
9 #include "GrBatch.h" 9 #include "GrBatch.h"
10 #include "GrBatchTarget.h" 10 #include "GrBatchTarget.h"
11 #include "GrBatchTest.h"
11 #include "GrBufferAllocPool.h" 12 #include "GrBufferAllocPool.h"
13 #include "GrContext.h"
12 #include "GrDefaultGeoProcFactory.h" 14 #include "GrDefaultGeoProcFactory.h"
13 #include "GrGeometryProcessor.h" 15 #include "GrGeometryProcessor.h"
14 #include "GrGpu.h" 16 #include "GrGpu.h"
15 #include "GrInvariantOutput.h" 17 #include "GrInvariantOutput.h"
18 #include "GrTestUtils.h"
16 #include "SkColorPriv.h" 19 #include "SkColorPriv.h"
17 #include "gl/GrGLProcessor.h" 20 #include "gl/GrGLProcessor.h"
18 #include "gl/GrGLGeometryProcessor.h" 21 #include "gl/GrGLGeometryProcessor.h"
19 #include "gl/builders/GrGLProgramBuilder.h" 22 #include "gl/builders/GrGLProgramBuilder.h"
20 23
21 /////////////////////////////////////////////////////////////////////////////// 24 ///////////////////////////////////////////////////////////////////////////////
22 25
23 static void set_inset_fan(SkPoint* pts, size_t stride, 26 static void set_inset_fan(SkPoint* pts, size_t stride,
24 const SkRect& r, SkScalar dx, SkScalar dy) { 27 const SkRect& r, SkScalar dx, SkScalar dy) {
25 pts->setRectFan(r.fLeft + dx, r.fTop + dy, 28 pts->setRectFan(r.fLeft + dx, r.fTop + dy,
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 bool fColorIgnored; 317 bool fColorIgnored;
315 bool fCoverageIgnored; 318 bool fCoverageIgnored;
316 bool fCanTweakAlphaForCoverage; 319 bool fCanTweakAlphaForCoverage;
317 }; 320 };
318 321
319 BatchTracker fBatch; 322 BatchTracker fBatch;
320 const GrIndexBuffer* fIndexBuffer; 323 const GrIndexBuffer* fIndexBuffer;
321 SkSTArray<1, Geometry, true> fGeoData; 324 SkSTArray<1, Geometry, true> fGeoData;
322 }; 325 };
323 326
327 BATCH_TEST_DEFINE(AAFillRectBatch) {
328 AAFillRectBatch::Geometry geo;
329 geo.fColor = GrRandomColor(random);
330 geo.fViewMatrix = GrTest::TestMatrix(random);
331 geo.fRect = GrTest::TestRect(random);
332 geo.fDevRect = GrTest::TestRect(random);
333
334 static GrIndexBuffer* aaFillRectIndexBuffer = NULL;
335 if (!aaFillRectIndexBuffer) {
336 aaFillRectIndexBuffer =
337 context->getGpu()->createInstancedIndexBuffer(gFillAARectIdx,
338 kIndicesPerAAFillR ect,
339 kNumAAFillRectsInI ndexBuffer,
340 kVertsPerAAFillRec t);
341 }
342
343 return AAFillRectBatch::Create(geo, aaFillRectIndexBuffer);
344 }
345
324 namespace { 346 namespace {
325 // Should the coverage be multiplied into the color attrib or use a separate att rib. 347 // Should the coverage be multiplied into the color attrib or use a separate att rib.
326 enum CoverageAttribType { 348 enum CoverageAttribType {
327 kUseColor_CoverageAttribType, 349 kUseColor_CoverageAttribType,
328 kUseCoverage_CoverageAttribType, 350 kUseCoverage_CoverageAttribType,
329 }; 351 };
330 } 352 }
331 353
332 void GrAARectRenderer::reset() { 354 void GrAARectRenderer::reset() {
333 SkSafeSetNull(fAAFillRectIndexBuffer); 355 SkSafeSetNull(fAAFillRectIndexBuffer);
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 437
416 static const int kIndicesPerBevelStrokeRect = SK_ARRAY_COUNT(gBevelStrokeAARectI dx); 438 static const int kIndicesPerBevelStrokeRect = SK_ARRAY_COUNT(gBevelStrokeAARectI dx);
417 static const int kVertsPerBevelStrokeRect = 24; 439 static const int kVertsPerBevelStrokeRect = 24;
418 static const int kNumBevelStrokeRectsInIndexBuffer = 256; 440 static const int kNumBevelStrokeRectsInIndexBuffer = 256;
419 441
420 static int aa_stroke_rect_index_count(bool miterStroke) { 442 static int aa_stroke_rect_index_count(bool miterStroke) {
421 return miterStroke ? SK_ARRAY_COUNT(gMiterStrokeAARectIdx) : 443 return miterStroke ? SK_ARRAY_COUNT(gMiterStrokeAARectIdx) :
422 SK_ARRAY_COUNT(gBevelStrokeAARectIdx); 444 SK_ARRAY_COUNT(gBevelStrokeAARectIdx);
423 } 445 }
424 446
425 GrIndexBuffer* GrAARectRenderer::aaStrokeRectIndexBuffer(bool miterStroke) { 447 static GrIndexBuffer* setup_aa_stroke_rect_indexbuffer(GrIndexBuffer** aaMiterSt rokeRectIndexBuffer,
448 GrIndexBuffer** aaBevelSt rokeRectIndexBuffer,
449 GrGpu* gpu,
450 bool miterStroke) {
426 if (miterStroke) { 451 if (miterStroke) {
427 if (NULL == fAAMiterStrokeRectIndexBuffer) { 452 if (!*aaMiterStrokeRectIndexBuffer) {
428 fAAMiterStrokeRectIndexBuffer = 453 *aaMiterStrokeRectIndexBuffer =
429 fGpu->createInstancedIndexBuffer(gMiterStrokeAARectIdx, 454 gpu->createInstancedIndexBuffer(gMiterStrokeAARectIdx,
430 kIndicesPerMiterStrokeRect, 455 kIndicesPerMiterStrokeRect,
431 kNumMiterStrokeRectsInIndex Buffer, 456 kNumMiterStrokeRectsInIndexB uffer,
432 kVertsPerMiterStrokeRect); 457 kVertsPerMiterStrokeRect);
433 } 458 }
434 return fAAMiterStrokeRectIndexBuffer; 459 return *aaMiterStrokeRectIndexBuffer;
435 } else { 460 } else {
436 if (NULL == fAABevelStrokeRectIndexBuffer) { 461 if (!*aaBevelStrokeRectIndexBuffer) {
437 fAABevelStrokeRectIndexBuffer = 462 *aaBevelStrokeRectIndexBuffer =
438 fGpu->createInstancedIndexBuffer(gBevelStrokeAARectIdx, 463 gpu->createInstancedIndexBuffer(gBevelStrokeAARectIdx,
439 kIndicesPerBevelStrokeRect, 464 kIndicesPerBevelStrokeRect,
440 kNumBevelStrokeRectsInIndex Buffer, 465 kNumBevelStrokeRectsInIndexB uffer,
441 kVertsPerBevelStrokeRect); 466 kVertsPerBevelStrokeRect);
442 } 467 }
443 return fAABevelStrokeRectIndexBuffer; 468 return *aaBevelStrokeRectIndexBuffer;
444 } 469 }
445 } 470 }
446 471
447 void GrAARectRenderer::geometryFillAARect(GrDrawTarget* target, 472 void GrAARectRenderer::geometryFillAARect(GrDrawTarget* target,
448 GrPipelineBuilder* pipelineBuilder, 473 GrPipelineBuilder* pipelineBuilder,
449 GrColor color, 474 GrColor color,
450 const SkMatrix& viewMatrix, 475 const SkMatrix& viewMatrix,
451 const SkRect& rect, 476 const SkRect& rect,
452 const SkRect& devRect) { 477 const SkRect& devRect) {
453 if (!fAAFillRectIndexBuffer) { 478 if (!fAAFillRectIndexBuffer) {
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 bool fCoverageIgnored; 869 bool fCoverageIgnored;
845 bool fMiterStroke; 870 bool fMiterStroke;
846 bool fCanTweakAlphaForCoverage; 871 bool fCanTweakAlphaForCoverage;
847 }; 872 };
848 873
849 BatchTracker fBatch; 874 BatchTracker fBatch;
850 const GrIndexBuffer* fIndexBuffer; 875 const GrIndexBuffer* fIndexBuffer;
851 SkSTArray<1, Geometry, true> fGeoData; 876 SkSTArray<1, Geometry, true> fGeoData;
852 }; 877 };
853 878
879 BATCH_TEST_DEFINE(AAStrokeRectBatch) {
880 static GrIndexBuffer* aaMiterStrokeRectIndexBuffer = NULL;
881 static GrIndexBuffer* aaBevelStrokeRectIndexBuffer = NULL;
882
883 bool miterStroke = random->nextBool();
884
885 GrIndexBuffer* indexBuffer = setup_aa_stroke_rect_indexbuffer(&aaMiterStroke RectIndexBuffer,
886 &aaBevelStroke RectIndexBuffer,
887 context->getGp u(),
888 miterStroke);
889
890 // Create mock stroke rect
891 SkRect outside = GrTest::TestRect(random);
892 SkScalar minDim = SkMinScalar(outside.width(), outside.height());
893 SkScalar strokeWidth = minDim * 0.1f;
894 SkRect outsideAssist = outside;
895 outsideAssist.outset(strokeWidth, strokeWidth);
896 SkRect inside = outside;
897 inside.inset(strokeWidth, strokeWidth);
898
899 AAStrokeRectBatch::Geometry geo;
900 geo.fColor = GrRandomColor(random);
901 geo.fDevOutside = outside;
902 geo.fDevOutsideAssist = outsideAssist;
903 geo.fDevInside = inside;
904 geo.fMiterStroke = miterStroke;
905
906 return AAStrokeRectBatch::Create(geo, GrTest::TestMatrix(random), indexBuffe r);
907 }
854 908
855 void GrAARectRenderer::geometryStrokeAARect(GrDrawTarget* target, 909 void GrAARectRenderer::geometryStrokeAARect(GrDrawTarget* target,
856 GrPipelineBuilder* pipelineBuilder, 910 GrPipelineBuilder* pipelineBuilder,
857 GrColor color, 911 GrColor color,
858 const SkMatrix& viewMatrix, 912 const SkMatrix& viewMatrix,
859 const SkRect& devOutside, 913 const SkRect& devOutside,
860 const SkRect& devOutsideAssist, 914 const SkRect& devOutsideAssist,
861 const SkRect& devInside, 915 const SkRect& devInside,
862 bool miterStroke) { 916 bool miterStroke) {
863 GrIndexBuffer* indexBuffer = this->aaStrokeRectIndexBuffer(miterStroke); 917 GrIndexBuffer* indexBuffer = setup_aa_stroke_rect_indexbuffer(&fAAMiterStrok eRectIndexBuffer,
918 &fAABevelStrok eRectIndexBuffer,
919 fGpu,
920 miterStroke);
864 if (!indexBuffer) { 921 if (!indexBuffer) {
865 SkDebugf("Failed to create index buffer!\n"); 922 SkDebugf("Failed to create index buffer!\n");
866 return; 923 return;
867 } 924 }
868 925
869 AAStrokeRectBatch::Geometry geometry; 926 AAStrokeRectBatch::Geometry geometry;
870 geometry.fColor = color; 927 geometry.fColor = color;
871 geometry.fDevOutside = devOutside; 928 geometry.fDevOutside = devOutside;
872 geometry.fDevOutsideAssist = devOutsideAssist; 929 geometry.fDevOutsideAssist = devOutsideAssist;
873 geometry.fDevInside = devInside; 930 geometry.fDevInside = devInside;
(...skipping 17 matching lines...) Expand all
891 viewMatrix.mapPoints((SkPoint*)&devInside, (const SkPoint*)&rects[1], 2); 948 viewMatrix.mapPoints((SkPoint*)&devInside, (const SkPoint*)&rects[1], 2);
892 949
893 if (devInside.isEmpty()) { 950 if (devInside.isEmpty()) {
894 this->fillAARect(target, pipelineBuilder, color, viewMatrix, devOutside, devOutside); 951 this->fillAARect(target, pipelineBuilder, color, viewMatrix, devOutside, devOutside);
895 return; 952 return;
896 } 953 }
897 954
898 this->geometryStrokeAARect(target, pipelineBuilder, color, viewMatrix, devOu tside, 955 this->geometryStrokeAARect(target, pipelineBuilder, color, viewMatrix, devOu tside,
899 devOutsideAssist, devInside, true); 956 devOutsideAssist, devInside, true);
900 } 957 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698