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

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

Issue 715903002: Push creation of default GP to the caller (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 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
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "GrContext.h" 9 #include "GrContext.h"
10 10
11 #include "effects/GrConfigConversionEffect.h"
12 #include "effects/GrDashingEffect.h"
13 #include "effects/GrSingleTextureEffect.h"
14
15 #include "GrAARectRenderer.h" 11 #include "GrAARectRenderer.h"
16 #include "GrBufferAllocPool.h" 12 #include "GrBufferAllocPool.h"
17 #include "GrGpu.h" 13 #include "GrDefaultGeoProcFactory.h"
18 #include "GrDistanceFieldTextContext.h" 14 #include "GrDistanceFieldTextContext.h"
19 #include "GrDrawTargetCaps.h" 15 #include "GrDrawTargetCaps.h"
16 #include "GrGpu.h"
20 #include "GrIndexBuffer.h" 17 #include "GrIndexBuffer.h"
21 #include "GrInOrderDrawBuffer.h" 18 #include "GrInOrderDrawBuffer.h"
22 #include "GrLayerCache.h" 19 #include "GrLayerCache.h"
23 #include "GrOvalRenderer.h" 20 #include "GrOvalRenderer.h"
24 #include "GrPathRenderer.h" 21 #include "GrPathRenderer.h"
25 #include "GrPathUtils.h" 22 #include "GrPathUtils.h"
26 #include "GrResourceCache.h" 23 #include "GrResourceCache.h"
27 #include "GrResourceCache2.h" 24 #include "GrResourceCache2.h"
28 #include "GrSoftwarePathRenderer.h" 25 #include "GrSoftwarePathRenderer.h"
29 #include "GrStencilBuffer.h" 26 #include "GrStencilBuffer.h"
30 #include "GrStencilAndCoverTextContext.h" 27 #include "GrStencilAndCoverTextContext.h"
31 #include "GrStrokeInfo.h" 28 #include "GrStrokeInfo.h"
32 #include "GrSurfacePriv.h" 29 #include "GrSurfacePriv.h"
33 #include "GrTextStrike.h" 30 #include "GrTextStrike.h"
34 #include "GrTexturePriv.h" 31 #include "GrTexturePriv.h"
35 #include "GrTraceMarker.h" 32 #include "GrTraceMarker.h"
36 #include "GrTracing.h" 33 #include "GrTracing.h"
37 #include "SkDashPathPriv.h" 34 #include "SkDashPathPriv.h"
38 #include "SkConfig8888.h" 35 #include "SkConfig8888.h"
39 #include "SkGr.h" 36 #include "SkGr.h"
40 #include "SkRRect.h" 37 #include "SkRRect.h"
41 #include "SkStrokeRec.h" 38 #include "SkStrokeRec.h"
42 #include "SkTLazy.h" 39 #include "SkTLazy.h"
43 #include "SkTLS.h" 40 #include "SkTLS.h"
44 #include "SkTraceEvent.h" 41 #include "SkTraceEvent.h"
45 42
43 #include "effects/GrConfigConversionEffect.h"
44 #include "effects/GrDashingEffect.h"
45 #include "effects/GrSingleTextureEffect.h"
46
46 #ifdef SK_DEBUG 47 #ifdef SK_DEBUG
47 // change this to a 1 to see notifications when partial coverage fails 48 // change this to a 1 to see notifications when partial coverage fails
48 #define GR_DEBUG_PARTIAL_COVERAGE_CHECK 0 49 #define GR_DEBUG_PARTIAL_COVERAGE_CHECK 0
49 #else 50 #else
50 #define GR_DEBUG_PARTIAL_COVERAGE_CHECK 0 51 #define GR_DEBUG_PARTIAL_COVERAGE_CHECK 0
51 #endif 52 #endif
52 53
53 static const size_t MAX_RESOURCE_CACHE_COUNT = GR_DEFAULT_RESOURCE_CACHE_COUNT_L IMIT; 54 static const size_t MAX_RESOURCE_CACHE_COUNT = GR_DEFAULT_RESOURCE_CACHE_COUNT_L IMIT;
54 static const size_t MAX_RESOURCE_CACHE_BYTES = GR_DEFAULT_RESOURCE_CACHE_MB_LIMI T * 1024 * 1024; 55 static const size_t MAX_RESOURCE_CACHE_BYTES = GR_DEFAULT_RESOURCE_CACHE_MB_LIMI T * 1024 * 1024;
55 56
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 const uint8_t* srcRow = reinterpret_cast<const uint8_t *>(src) + (y>>16) *srcW*bpp; 304 const uint8_t* srcRow = reinterpret_cast<const uint8_t *>(src) + (y>>16) *srcW*bpp;
304 uint8_t* dstRow = reinterpret_cast<uint8_t *>(dst) + j*dstW*bpp; 305 uint8_t* dstRow = reinterpret_cast<uint8_t *>(dst) + j*dstW*bpp;
305 for (size_t i = 0; i < dstXLimit; i += bpp) { 306 for (size_t i = 0; i < dstXLimit; i += bpp) {
306 memcpy(dstRow + i, srcRow + (x>>16)*bpp, bpp); 307 memcpy(dstRow + i, srcRow + (x>>16)*bpp, bpp);
307 x += dx; 308 x += dx;
308 } 309 }
309 y += dy; 310 y += dy;
310 } 311 }
311 } 312 }
312 313
313 namespace {
314
315 // position + local coordinate
316 extern const GrVertexAttrib gVertexAttribs[] = {
317 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding },
318 {kVec2f_GrVertexAttribType, sizeof(SkPoint), kLocalCoord_GrVertexAttribBindi ng}
319 };
320
321 };
322
323 // The desired texture is NPOT and tiled but that isn't supported by 314 // The desired texture is NPOT and tiled but that isn't supported by
324 // the current hardware. Resize the texture to be a POT 315 // the current hardware. Resize the texture to be a POT
325 GrTexture* GrContext::createResizedTexture(const GrSurfaceDesc& desc, 316 GrTexture* GrContext::createResizedTexture(const GrSurfaceDesc& desc,
326 const GrCacheID& cacheID, 317 const GrCacheID& cacheID,
327 const void* srcData, 318 const void* srcData,
328 size_t rowBytes, 319 size_t rowBytes,
329 bool filter) { 320 bool filter) {
330 SkAutoTUnref<GrTexture> clampedTexture(this->findAndRefTexture(desc, cacheID , NULL)); 321 SkAutoTUnref<GrTexture> clampedTexture(this->findAndRefTexture(desc, cacheID , NULL));
331 if (NULL == clampedTexture) { 322 if (NULL == clampedTexture) {
332 clampedTexture.reset(this->createTexture(NULL, desc, cacheID, srcData, r owBytes)); 323 clampedTexture.reset(this->createTexture(NULL, desc, cacheID, srcData, r owBytes));
(...skipping 18 matching lines...) Expand all
351 drawState->setRenderTarget(texture->asRenderTarget()); 342 drawState->setRenderTarget(texture->asRenderTarget());
352 343
353 // if filtering is not desired then we want to ensure all 344 // if filtering is not desired then we want to ensure all
354 // texels in the resampled image are copies of texels from 345 // texels in the resampled image are copies of texels from
355 // the original. 346 // the original.
356 GrTextureParams params(SkShader::kClamp_TileMode, 347 GrTextureParams params(SkShader::kClamp_TileMode,
357 filter ? GrTextureParams::kBilerp_FilterMode : 348 filter ? GrTextureParams::kBilerp_FilterMode :
358 GrTextureParams::kNone_FilterMode); 349 GrTextureParams::kNone_FilterMode);
359 drawState->addColorTextureProcessor(clampedTexture, SkMatrix::I(), param s); 350 drawState->addColorTextureProcessor(clampedTexture, SkMatrix::I(), param s);
360 351
361 drawState->setVertexAttribs<gVertexAttribs>(SK_ARRAY_COUNT(gVertexAttrib s), 352 drawState->setGeometryProcessor(
362 2 * sizeof(SkPoint)); 353 GrDefaultGeoProcFactory::CreateAndSetAttribs(
354 drawState,
355 GrDefaultGeoProcFactory::kPosition_GPType |
356 GrDefaultGeoProcFactory::kLocalCoord_GPType))->unref();
363 357
364 GrDrawTarget::AutoReleaseGeometry arg(fDrawBuffer, 4, 0); 358 GrDrawTarget::AutoReleaseGeometry arg(fDrawBuffer, 4, 0);
365 359
366 if (arg.succeeded()) { 360 if (arg.succeeded()) {
367 SkPoint* verts = (SkPoint*) arg.vertices(); 361 SkPoint* verts = (SkPoint*) arg.vertices();
368 verts[0].setIRectFan(0, 0, texture->width(), texture->height(), 2 * sizeof(SkPoint)); 362 verts[0].setIRectFan(0, 0, texture->width(), texture->height(), 2 * sizeof(SkPoint));
369 verts[1].setIRectFan(0, 0, 1, 1, 2 * sizeof(SkPoint)); 363 verts[1].setIRectFan(0, 0, 1, 1, 2 * sizeof(SkPoint));
370 fDrawBuffer->drawNonIndexed(kTriangleFan_GrPrimitiveType, 0, 4); 364 fDrawBuffer->drawNonIndexed(kTriangleFan_GrPrimitiveType, 0, 4);
371 } 365 }
372 } else { 366 } else {
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 return; 777 return;
784 } 778 }
785 779
786 if (width >= 0) { 780 if (width >= 0) {
787 // TODO: consider making static vertex buffers for these cases. 781 // TODO: consider making static vertex buffers for these cases.
788 // Hairline could be done by just adding closing vertex to 782 // Hairline could be done by just adding closing vertex to
789 // unitSquareVertexBuffer() 783 // unitSquareVertexBuffer()
790 784
791 static const int worstCaseVertCount = 10; 785 static const int worstCaseVertCount = 10;
792 target->drawState()->setDefaultVertexAttribs(); 786 target->drawState()->setDefaultVertexAttribs();
787 target->drawState()->setGeometryProcessor(GrDefaultGeoProcFactory::Creat e(false))->unref();
793 GrDrawTarget::AutoReleaseGeometry geo(target, worstCaseVertCount, 0); 788 GrDrawTarget::AutoReleaseGeometry geo(target, worstCaseVertCount, 0);
794 789
795 if (!geo.succeeded()) { 790 if (!geo.succeeded()) {
796 SkDebugf("Failed to get space for vertices!\n"); 791 SkDebugf("Failed to get space for vertices!\n");
797 return; 792 return;
798 } 793 }
799 794
800 GrPrimitiveType primType; 795 GrPrimitiveType primType;
801 int vertCount; 796 int vertCount;
802 SkPoint* vertex = geo.positions(); 797 SkPoint* vertex = geo.positions();
(...skipping 29 matching lines...) Expand all
832 GrDrawTarget* target = this->prepareToDraw(&paint, &are, &acf); 827 GrDrawTarget* target = this->prepareToDraw(&paint, &are, &acf);
833 if (NULL == target) { 828 if (NULL == target) {
834 return; 829 return;
835 } 830 }
836 831
837 GR_CREATE_TRACE_MARKER("GrContext::drawRectToRect", target); 832 GR_CREATE_TRACE_MARKER("GrContext::drawRectToRect", target);
838 833
839 target->drawRect(dstRect, &localRect, localMatrix); 834 target->drawRect(dstRect, &localRect, localMatrix);
840 } 835 }
841 836
842 namespace {
843
844 extern const GrVertexAttrib gPosUVColorAttribs[] = {
845 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding },
846 {kVec2f_GrVertexAttribType, sizeof(SkPoint), kLocalCoord_GrVertexAttribBind ing },
847 {kVec4ub_GrVertexAttribType, 2*sizeof(SkPoint), kColor_GrVertexAttribBinding }
848 };
849
850 static const size_t kPosUVAttribsSize = 2 * sizeof(SkPoint);
851 static const size_t kPosUVColorAttribsSize = 2 * sizeof(SkPoint) + sizeof(GrColo r);
852
853 extern const GrVertexAttrib gPosColorAttribs[] = {
854 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding},
855 {kVec4ub_GrVertexAttribType, sizeof(SkPoint), kColor_GrVertexAttribBinding},
856 };
857
858 static const size_t kPosAttribsSize = sizeof(SkPoint);
859 static const size_t kPosColorAttribsSize = sizeof(SkPoint) + sizeof(GrColor);
860
861 static void set_vertex_attributes(GrDrawState* drawState, 837 static void set_vertex_attributes(GrDrawState* drawState,
862 const SkPoint* texCoords, 838 const SkPoint* texCoords,
863 const GrColor* colors, 839 const GrColor* colors,
864 int* colorOffset, 840 int* colorOffset,
865 int* texOffset) { 841 int* texOffset) {
866 *texOffset = -1; 842 *texOffset = -1;
867 *colorOffset = -1; 843 *colorOffset = -1;
868 844
845 uint32_t flags = GrDefaultGeoProcFactory::kPosition_GPType;
869 if (texCoords && colors) { 846 if (texCoords && colors) {
870 *texOffset = sizeof(SkPoint); 847 *colorOffset = sizeof(SkPoint);
871 *colorOffset = 2*sizeof(SkPoint); 848 *texOffset = sizeof(SkPoint) + sizeof(GrColor);
872 drawState->setVertexAttribs<gPosUVColorAttribs>(3, kPosUVColorAttribsSiz e); 849 flags |= GrDefaultGeoProcFactory::kColor_GPType |
850 GrDefaultGeoProcFactory::kLocalCoord_GPType;
873 } else if (texCoords) { 851 } else if (texCoords) {
874 *texOffset = sizeof(SkPoint); 852 *texOffset = sizeof(SkPoint);
875 drawState->setVertexAttribs<gPosUVColorAttribs>(2, kPosUVAttribsSize); 853 flags |= GrDefaultGeoProcFactory::kLocalCoord_GPType;
876 } else if (colors) { 854 } else if (colors) {
877 *colorOffset = sizeof(SkPoint); 855 *colorOffset = sizeof(SkPoint);
878 drawState->setVertexAttribs<gPosColorAttribs>(2, kPosColorAttribsSize); 856 flags |= GrDefaultGeoProcFactory::kColor_GPType;
879 } else {
880 drawState->setVertexAttribs<gPosColorAttribs>(1, kPosAttribsSize);
881 } 857 }
858 drawState->setGeometryProcessor(GrDefaultGeoProcFactory::CreateAndSetAttribs (drawState,
859 flags))->unref();
882 } 860 }
883 861
884 };
885
886 void GrContext::drawVertices(const GrPaint& paint, 862 void GrContext::drawVertices(const GrPaint& paint,
887 GrPrimitiveType primitiveType, 863 GrPrimitiveType primitiveType,
888 int vertexCount, 864 int vertexCount,
889 const SkPoint positions[], 865 const SkPoint positions[],
890 const SkPoint texCoords[], 866 const SkPoint texCoords[],
891 const GrColor colors[], 867 const GrColor colors[],
892 const uint16_t indices[], 868 const uint16_t indices[],
893 int indexCount) { 869 int indexCount) {
894 AutoRestoreEffects are; 870 AutoRestoreEffects are;
895 AutoCheckFlush acf(this); 871 AutoCheckFlush acf(this);
(...skipping 882 matching lines...) Expand 10 before | Expand all | Expand 10 after
1778 fResourceCache->printStats(); 1754 fResourceCache->printStats();
1779 } 1755 }
1780 #endif 1756 #endif
1781 1757
1782 #if GR_GPU_STATS 1758 #if GR_GPU_STATS
1783 const GrContext::GPUStats* GrContext::gpuStats() const { 1759 const GrContext::GPUStats* GrContext::gpuStats() const {
1784 return fGpu->gpuStats(); 1760 return fGpu->gpuStats();
1785 } 1761 }
1786 #endif 1762 #endif
1787 1763
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698