OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2010 Google Inc. | 3 * Copyright 2010 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 | 9 |
10 | 10 |
(...skipping 27 matching lines...) Expand all Loading... |
38 fDevBounds = &fDevBoundsStorage; | 38 fDevBounds = &fDevBoundsStorage; |
39 } else { | 39 } else { |
40 fDevBounds = NULL; | 40 fDevBounds = NULL; |
41 } | 41 } |
42 | 42 |
43 fDstCopy = di.fDstCopy; | 43 fDstCopy = di.fDstCopy; |
44 | 44 |
45 return *this; | 45 return *this; |
46 } | 46 } |
47 | 47 |
48 #if GR_DEBUG | 48 #if SK_DEBUG |
49 bool GrDrawTarget::DrawInfo::isInstanced() const { | 49 bool GrDrawTarget::DrawInfo::isInstanced() const { |
50 if (fInstanceCount > 0) { | 50 if (fInstanceCount > 0) { |
51 SkASSERT(0 == fIndexCount % fIndicesPerInstance); | 51 SkASSERT(0 == fIndexCount % fIndicesPerInstance); |
52 SkASSERT(0 == fVertexCount % fVerticesPerInstance); | 52 SkASSERT(0 == fVertexCount % fVerticesPerInstance); |
53 SkASSERT(fIndexCount / fIndicesPerInstance == fInstanceCount); | 53 SkASSERT(fIndexCount / fIndicesPerInstance == fInstanceCount); |
54 SkASSERT(fVertexCount / fVerticesPerInstance == fInstanceCount); | 54 SkASSERT(fVertexCount / fVerticesPerInstance == fInstanceCount); |
55 // there is no way to specify a non-zero start index to drawIndexedInsta
nces(). | 55 // there is no way to specify a non-zero start index to drawIndexedInsta
nces(). |
56 SkASSERT(0 == fStartIndex); | 56 SkASSERT(0 == fStartIndex); |
57 return true; | 57 return true; |
58 } else { | 58 } else { |
(...skipping 30 matching lines...) Expand all Loading... |
89 | 89 |
90 GrDrawTarget::GrDrawTarget(GrContext* context) | 90 GrDrawTarget::GrDrawTarget(GrContext* context) |
91 : fClip(NULL) | 91 : fClip(NULL) |
92 , fContext(context) { | 92 , fContext(context) { |
93 SkASSERT(NULL != context); | 93 SkASSERT(NULL != context); |
94 | 94 |
95 fDrawState = &fDefaultDrawState; | 95 fDrawState = &fDefaultDrawState; |
96 // We assume that fDrawState always owns a ref to the object it points at. | 96 // We assume that fDrawState always owns a ref to the object it points at. |
97 fDefaultDrawState.ref(); | 97 fDefaultDrawState.ref(); |
98 GeometrySrcState& geoSrc = fGeoSrcStateStack.push_back(); | 98 GeometrySrcState& geoSrc = fGeoSrcStateStack.push_back(); |
99 #if GR_DEBUG | 99 #if SK_DEBUG |
100 geoSrc.fVertexCount = DEBUG_INVAL_START_IDX; | 100 geoSrc.fVertexCount = DEBUG_INVAL_START_IDX; |
101 geoSrc.fVertexBuffer = (GrVertexBuffer*)DEBUG_INVAL_BUFFER; | 101 geoSrc.fVertexBuffer = (GrVertexBuffer*)DEBUG_INVAL_BUFFER; |
102 geoSrc.fIndexCount = DEBUG_INVAL_START_IDX; | 102 geoSrc.fIndexCount = DEBUG_INVAL_START_IDX; |
103 geoSrc.fIndexBuffer = (GrIndexBuffer*)DEBUG_INVAL_BUFFER; | 103 geoSrc.fIndexBuffer = (GrIndexBuffer*)DEBUG_INVAL_BUFFER; |
104 #endif | 104 #endif |
105 geoSrc.fVertexSrc = kNone_GeometrySrcType; | 105 geoSrc.fVertexSrc = kNone_GeometrySrcType; |
106 geoSrc.fIndexSrc = kNone_GeometrySrcType; | 106 geoSrc.fIndexSrc = kNone_GeometrySrcType; |
107 } | 107 } |
108 | 108 |
109 GrDrawTarget::~GrDrawTarget() { | 109 GrDrawTarget::~GrDrawTarget() { |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 case kNone_GeometrySrcType: | 232 case kNone_GeometrySrcType: |
233 break; | 233 break; |
234 case kArray_GeometrySrcType: | 234 case kArray_GeometrySrcType: |
235 this->releaseVertexArray(); | 235 this->releaseVertexArray(); |
236 break; | 236 break; |
237 case kReserved_GeometrySrcType: | 237 case kReserved_GeometrySrcType: |
238 this->releaseReservedVertexSpace(); | 238 this->releaseReservedVertexSpace(); |
239 break; | 239 break; |
240 case kBuffer_GeometrySrcType: | 240 case kBuffer_GeometrySrcType: |
241 geoSrc.fVertexBuffer->unref(); | 241 geoSrc.fVertexBuffer->unref(); |
242 #if GR_DEBUG | 242 #if SK_DEBUG |
243 geoSrc.fVertexBuffer = (GrVertexBuffer*)DEBUG_INVAL_BUFFER; | 243 geoSrc.fVertexBuffer = (GrVertexBuffer*)DEBUG_INVAL_BUFFER; |
244 #endif | 244 #endif |
245 break; | 245 break; |
246 default: | 246 default: |
247 GrCrash("Unknown Vertex Source Type."); | 247 GrCrash("Unknown Vertex Source Type."); |
248 break; | 248 break; |
249 } | 249 } |
250 } | 250 } |
251 | 251 |
252 void GrDrawTarget::releasePreviousIndexSource() { | 252 void GrDrawTarget::releasePreviousIndexSource() { |
253 GeometrySrcState& geoSrc = fGeoSrcStateStack.back(); | 253 GeometrySrcState& geoSrc = fGeoSrcStateStack.back(); |
254 switch (geoSrc.fIndexSrc) { | 254 switch (geoSrc.fIndexSrc) { |
255 case kNone_GeometrySrcType: // these two don't require | 255 case kNone_GeometrySrcType: // these two don't require |
256 break; | 256 break; |
257 case kArray_GeometrySrcType: | 257 case kArray_GeometrySrcType: |
258 this->releaseIndexArray(); | 258 this->releaseIndexArray(); |
259 break; | 259 break; |
260 case kReserved_GeometrySrcType: | 260 case kReserved_GeometrySrcType: |
261 this->releaseReservedIndexSpace(); | 261 this->releaseReservedIndexSpace(); |
262 break; | 262 break; |
263 case kBuffer_GeometrySrcType: | 263 case kBuffer_GeometrySrcType: |
264 geoSrc.fIndexBuffer->unref(); | 264 geoSrc.fIndexBuffer->unref(); |
265 #if GR_DEBUG | 265 #if SK_DEBUG |
266 geoSrc.fIndexBuffer = (GrIndexBuffer*)DEBUG_INVAL_BUFFER; | 266 geoSrc.fIndexBuffer = (GrIndexBuffer*)DEBUG_INVAL_BUFFER; |
267 #endif | 267 #endif |
268 break; | 268 break; |
269 default: | 269 default: |
270 GrCrash("Unknown Index Source Type."); | 270 GrCrash("Unknown Index Source Type."); |
271 break; | 271 break; |
272 } | 272 } |
273 } | 273 } |
274 | 274 |
275 void GrDrawTarget::setVertexSourceToArray(const void* vertexArray, | 275 void GrDrawTarget::setVertexSourceToArray(const void* vertexArray, |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 this->releasePreviousIndexSource(); | 318 this->releasePreviousIndexSource(); |
319 GeometrySrcState& geoSrc = fGeoSrcStateStack.back(); | 319 GeometrySrcState& geoSrc = fGeoSrcStateStack.back(); |
320 geoSrc.fIndexSrc = kNone_GeometrySrcType; | 320 geoSrc.fIndexSrc = kNone_GeometrySrcType; |
321 } | 321 } |
322 | 322 |
323 void GrDrawTarget::pushGeometrySource() { | 323 void GrDrawTarget::pushGeometrySource() { |
324 this->geometrySourceWillPush(); | 324 this->geometrySourceWillPush(); |
325 GeometrySrcState& newState = fGeoSrcStateStack.push_back(); | 325 GeometrySrcState& newState = fGeoSrcStateStack.push_back(); |
326 newState.fIndexSrc = kNone_GeometrySrcType; | 326 newState.fIndexSrc = kNone_GeometrySrcType; |
327 newState.fVertexSrc = kNone_GeometrySrcType; | 327 newState.fVertexSrc = kNone_GeometrySrcType; |
328 #if GR_DEBUG | 328 #if SK_DEBUG |
329 newState.fVertexCount = ~0; | 329 newState.fVertexCount = ~0; |
330 newState.fVertexBuffer = (GrVertexBuffer*)~0; | 330 newState.fVertexBuffer = (GrVertexBuffer*)~0; |
331 newState.fIndexCount = ~0; | 331 newState.fIndexCount = ~0; |
332 newState.fIndexBuffer = (GrIndexBuffer*)~0; | 332 newState.fIndexBuffer = (GrIndexBuffer*)~0; |
333 #endif | 333 #endif |
334 } | 334 } |
335 | 335 |
336 void GrDrawTarget::popGeometrySource() { | 336 void GrDrawTarget::popGeometrySource() { |
337 // if popping last element then pops are unbalanced with pushes | 337 // if popping last element then pops are unbalanced with pushes |
338 SkASSERT(fGeoSrcStateStack.count() > 1); | 338 SkASSERT(fGeoSrcStateStack.count() > 1); |
339 | 339 |
340 this->geometrySourceWillPop(fGeoSrcStateStack.fromBack(1)); | 340 this->geometrySourceWillPop(fGeoSrcStateStack.fromBack(1)); |
341 this->releasePreviousVertexSource(); | 341 this->releasePreviousVertexSource(); |
342 this->releasePreviousIndexSource(); | 342 this->releasePreviousIndexSource(); |
343 fGeoSrcStateStack.pop_back(); | 343 fGeoSrcStateStack.pop_back(); |
344 } | 344 } |
345 | 345 |
346 //////////////////////////////////////////////////////////////////////////////// | 346 //////////////////////////////////////////////////////////////////////////////// |
347 | 347 |
348 bool GrDrawTarget::checkDraw(GrPrimitiveType type, int startVertex, | 348 bool GrDrawTarget::checkDraw(GrPrimitiveType type, int startVertex, |
349 int startIndex, int vertexCount, | 349 int startIndex, int vertexCount, |
350 int indexCount) const { | 350 int indexCount) const { |
351 const GrDrawState& drawState = this->getDrawState(); | 351 const GrDrawState& drawState = this->getDrawState(); |
352 #if GR_DEBUG | 352 #if SK_DEBUG |
353 const GeometrySrcState& geoSrc = fGeoSrcStateStack.back(); | 353 const GeometrySrcState& geoSrc = fGeoSrcStateStack.back(); |
354 int maxVertex = startVertex + vertexCount; | 354 int maxVertex = startVertex + vertexCount; |
355 int maxValidVertex; | 355 int maxValidVertex; |
356 switch (geoSrc.fVertexSrc) { | 356 switch (geoSrc.fVertexSrc) { |
357 case kNone_GeometrySrcType: | 357 case kNone_GeometrySrcType: |
358 GrCrash("Attempting to draw without vertex src."); | 358 GrCrash("Attempting to draw without vertex src."); |
359 case kReserved_GeometrySrcType: // fallthrough | 359 case kReserved_GeometrySrcType: // fallthrough |
360 case kArray_GeometrySrcType: | 360 case kArray_GeometrySrcType: |
361 maxValidVertex = geoSrc.fVertexCount; | 361 maxValidVertex = geoSrc.fVertexCount; |
362 break; | 362 break; |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 return true; | 418 return true; |
419 } | 419 } |
420 GrRenderTarget* rt = this->drawState()->getRenderTarget(); | 420 GrRenderTarget* rt = this->drawState()->getRenderTarget(); |
421 | 421 |
422 const GrClipData* clip = this->getClip(); | 422 const GrClipData* clip = this->getClip(); |
423 SkIRect copyRect; | 423 SkIRect copyRect; |
424 clip->getConservativeBounds(this->getDrawState().getRenderTarget(), ©Rec
t); | 424 clip->getConservativeBounds(this->getDrawState().getRenderTarget(), ©Rec
t); |
425 SkIRect drawIBounds; | 425 SkIRect drawIBounds; |
426 if (info->getDevIBounds(&drawIBounds)) { | 426 if (info->getDevIBounds(&drawIBounds)) { |
427 if (!copyRect.intersect(drawIBounds)) { | 427 if (!copyRect.intersect(drawIBounds)) { |
428 #if GR_DEBUG | 428 #if SK_DEBUG |
429 GrPrintf("Missed an early reject. Bailing on draw from setupDstReadI
fNecessary.\n"); | 429 GrPrintf("Missed an early reject. Bailing on draw from setupDstReadI
fNecessary.\n"); |
430 #endif | 430 #endif |
431 return false; | 431 return false; |
432 } | 432 } |
433 } else { | 433 } else { |
434 #if GR_DEBUG | 434 #if SK_DEBUG |
435 //GrPrintf("No dev bounds when dst copy is made.\n"); | 435 //GrPrintf("No dev bounds when dst copy is made.\n"); |
436 #endif | 436 #endif |
437 } | 437 } |
438 | 438 |
439 // MSAA consideration: When there is support for reading MSAA samples in the
shader we could | 439 // MSAA consideration: When there is support for reading MSAA samples in the
shader we could |
440 // have per-sample dst values by making the copy multisampled. | 440 // have per-sample dst values by making the copy multisampled. |
441 GrTextureDesc desc; | 441 GrTextureDesc desc; |
442 this->initCopySurfaceDstDesc(rt, &desc); | 442 this->initCopySurfaceDstDesc(rt, &desc); |
443 desc.fWidth = copyRect.width(); | 443 desc.fWidth = copyRect.width(); |
444 desc.fHeight = copyRect.height(); | 444 desc.fHeight = copyRect.height(); |
(...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
990 GrPrintf("Geometry Shader Support : %s\n", gNY[fGeometryShaderSupport]); | 990 GrPrintf("Geometry Shader Support : %s\n", gNY[fGeometryShaderSupport]); |
991 GrPrintf("Dual Source Blending Support: %s\n", gNY[fDualSourceBlendingSuppor
t]); | 991 GrPrintf("Dual Source Blending Support: %s\n", gNY[fDualSourceBlendingSuppor
t]); |
992 GrPrintf("Buffer Lock Support : %s\n", gNY[fBufferLockSupport]); | 992 GrPrintf("Buffer Lock Support : %s\n", gNY[fBufferLockSupport]); |
993 GrPrintf("Path Stenciling Support : %s\n", gNY[fPathStencilingSupport]); | 993 GrPrintf("Path Stenciling Support : %s\n", gNY[fPathStencilingSupport]); |
994 GrPrintf("Dst Read In Shader Support : %s\n", gNY[fDstReadInShaderSupport])
; | 994 GrPrintf("Dst Read In Shader Support : %s\n", gNY[fDstReadInShaderSupport])
; |
995 GrPrintf("Reuse Scratch Textures : %s\n", gNY[fReuseScratchTextures]); | 995 GrPrintf("Reuse Scratch Textures : %s\n", gNY[fReuseScratchTextures]); |
996 GrPrintf("Max Texture Size : %d\n", fMaxTextureSize); | 996 GrPrintf("Max Texture Size : %d\n", fMaxTextureSize); |
997 GrPrintf("Max Render Target Size : %d\n", fMaxRenderTargetSize); | 997 GrPrintf("Max Render Target Size : %d\n", fMaxRenderTargetSize); |
998 GrPrintf("Max Sample Count : %d\n", fMaxSampleCount); | 998 GrPrintf("Max Sample Count : %d\n", fMaxSampleCount); |
999 } | 999 } |
OLD | NEW |