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 528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
539 // support NV_blend_equation_advanced. | 539 // support NV_blend_equation_advanced. |
540 GrDeviceCoordTexture dstCopy; | 540 GrDeviceCoordTexture dstCopy; |
541 if (!this->setupDstReadIfNecessary(&dstCopy, NULL)) { | 541 if (!this->setupDstReadIfNecessary(&dstCopy, NULL)) { |
542 return; | 542 return; |
543 } | 543 } |
544 | 544 |
545 this->onDrawPaths(pathRange, indices, count, transforms, transformsType, fil
l, | 545 this->onDrawPaths(pathRange, indices, count, transforms, transformsType, fil
l, |
546 dstCopy.texture() ? &dstCopy : NULL); | 546 dstCopy.texture() ? &dstCopy : NULL); |
547 } | 547 } |
548 | 548 |
| 549 void GrDrawTarget::clear(const SkIRect* rect, GrColor color, bool canIgnoreRect, |
| 550 GrRenderTarget* renderTarget) { |
| 551 if (fCaps->useDrawInsteadOfClear()) { |
| 552 // This works around a driver bug with clear by drawing a rect instead. |
| 553 // The driver will ignore a clear if it is the only thing rendered to a |
| 554 // target before the target is read. |
| 555 SkIRect rtRect = SkIRect::MakeWH(renderTarget->width(), renderTarget->he
ight()); |
| 556 if (NULL == rect || canIgnoreRect || rect->contains(rtRect)) { |
| 557 rect = &rtRect; |
| 558 // We first issue a discard() since that may help tilers. |
| 559 this->discard(renderTarget); |
| 560 } |
| 561 AutoStateRestore asr(this, kReset_ASRInit, &SkMatrix::I()); |
| 562 |
| 563 this->drawState()->setColor(color); |
| 564 this->drawState()->disableState(GrDrawState::kClip_StateBit); |
| 565 this->drawState()->disableState(GrDrawState::kHWAntialias_StateBit); |
| 566 this->drawState()->setRenderTarget(renderTarget); |
| 567 |
| 568 this->drawSimpleRect(*rect); |
| 569 } else { |
| 570 this->onClear(rect, color, canIgnoreRect, renderTarget); |
| 571 } |
| 572 } |
| 573 |
549 typedef GrTraceMarkerSet::Iter TMIter; | 574 typedef GrTraceMarkerSet::Iter TMIter; |
550 void GrDrawTarget::saveActiveTraceMarkers() { | 575 void GrDrawTarget::saveActiveTraceMarkers() { |
551 if (this->caps()->gpuTracingSupport()) { | 576 if (this->caps()->gpuTracingSupport()) { |
552 SkASSERT(0 == fStoredTraceMarkers.count()); | 577 SkASSERT(0 == fStoredTraceMarkers.count()); |
553 fStoredTraceMarkers.addSet(fActiveTraceMarkers); | 578 fStoredTraceMarkers.addSet(fActiveTraceMarkers); |
554 for (TMIter iter = fStoredTraceMarkers.begin(); iter != fStoredTraceMark
ers.end(); ++iter) { | 579 for (TMIter iter = fStoredTraceMarkers.begin(); iter != fStoredTraceMark
ers.end(); ++iter) { |
555 this->removeGpuTraceMarker(&(*iter)); | 580 this->removeGpuTraceMarker(&(*iter)); |
556 } | 581 } |
557 } | 582 } |
558 } | 583 } |
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
962 fShaderDerivativeSupport = false; | 987 fShaderDerivativeSupport = false; |
963 fGeometryShaderSupport = false; | 988 fGeometryShaderSupport = false; |
964 fDualSourceBlendingSupport = false; | 989 fDualSourceBlendingSupport = false; |
965 fPathRenderingSupport = false; | 990 fPathRenderingSupport = false; |
966 fDstReadInShaderSupport = false; | 991 fDstReadInShaderSupport = false; |
967 fDiscardRenderTargetSupport = false; | 992 fDiscardRenderTargetSupport = false; |
968 fReuseScratchTextures = true; | 993 fReuseScratchTextures = true; |
969 fGpuTracingSupport = false; | 994 fGpuTracingSupport = false; |
970 fCompressedTexSubImageSupport = false; | 995 fCompressedTexSubImageSupport = false; |
971 | 996 |
| 997 fUseDrawInsteadOfClear = false; |
| 998 |
972 fMapBufferFlags = kNone_MapFlags; | 999 fMapBufferFlags = kNone_MapFlags; |
973 | 1000 |
974 fMaxRenderTargetSize = 0; | 1001 fMaxRenderTargetSize = 0; |
975 fMaxTextureSize = 0; | 1002 fMaxTextureSize = 0; |
976 fMaxSampleCount = 0; | 1003 fMaxSampleCount = 0; |
977 | 1004 |
978 memset(fConfigRenderSupport, 0, sizeof(fConfigRenderSupport)); | 1005 memset(fConfigRenderSupport, 0, sizeof(fConfigRenderSupport)); |
979 memset(fConfigTextureSupport, 0, sizeof(fConfigTextureSupport)); | 1006 memset(fConfigTextureSupport, 0, sizeof(fConfigTextureSupport)); |
980 } | 1007 } |
981 | 1008 |
982 GrDrawTargetCaps& GrDrawTargetCaps::operator=(const GrDrawTargetCaps& other) { | 1009 GrDrawTargetCaps& GrDrawTargetCaps::operator=(const GrDrawTargetCaps& other) { |
983 fMipMapSupport = other.fMipMapSupport; | 1010 fMipMapSupport = other.fMipMapSupport; |
984 fNPOTTextureTileSupport = other.fNPOTTextureTileSupport; | 1011 fNPOTTextureTileSupport = other.fNPOTTextureTileSupport; |
985 fTwoSidedStencilSupport = other.fTwoSidedStencilSupport; | 1012 fTwoSidedStencilSupport = other.fTwoSidedStencilSupport; |
986 fStencilWrapOpsSupport = other.fStencilWrapOpsSupport; | 1013 fStencilWrapOpsSupport = other.fStencilWrapOpsSupport; |
987 fHWAALineSupport = other.fHWAALineSupport; | 1014 fHWAALineSupport = other.fHWAALineSupport; |
988 fShaderDerivativeSupport = other.fShaderDerivativeSupport; | 1015 fShaderDerivativeSupport = other.fShaderDerivativeSupport; |
989 fGeometryShaderSupport = other.fGeometryShaderSupport; | 1016 fGeometryShaderSupport = other.fGeometryShaderSupport; |
990 fDualSourceBlendingSupport = other.fDualSourceBlendingSupport; | 1017 fDualSourceBlendingSupport = other.fDualSourceBlendingSupport; |
991 fPathRenderingSupport = other.fPathRenderingSupport; | 1018 fPathRenderingSupport = other.fPathRenderingSupport; |
992 fDstReadInShaderSupport = other.fDstReadInShaderSupport; | 1019 fDstReadInShaderSupport = other.fDstReadInShaderSupport; |
993 fDiscardRenderTargetSupport = other.fDiscardRenderTargetSupport; | 1020 fDiscardRenderTargetSupport = other.fDiscardRenderTargetSupport; |
994 fReuseScratchTextures = other.fReuseScratchTextures; | 1021 fReuseScratchTextures = other.fReuseScratchTextures; |
995 fGpuTracingSupport = other.fGpuTracingSupport; | 1022 fGpuTracingSupport = other.fGpuTracingSupport; |
996 fCompressedTexSubImageSupport = other.fCompressedTexSubImageSupport; | 1023 fCompressedTexSubImageSupport = other.fCompressedTexSubImageSupport; |
997 | 1024 |
| 1025 fUseDrawInsteadOfClear = other.fUseDrawInsteadOfClear; |
| 1026 |
998 fMapBufferFlags = other.fMapBufferFlags; | 1027 fMapBufferFlags = other.fMapBufferFlags; |
999 | 1028 |
1000 fMaxRenderTargetSize = other.fMaxRenderTargetSize; | 1029 fMaxRenderTargetSize = other.fMaxRenderTargetSize; |
1001 fMaxTextureSize = other.fMaxTextureSize; | 1030 fMaxTextureSize = other.fMaxTextureSize; |
1002 fMaxSampleCount = other.fMaxSampleCount; | 1031 fMaxSampleCount = other.fMaxSampleCount; |
1003 | 1032 |
1004 memcpy(fConfigRenderSupport, other.fConfigRenderSupport, sizeof(fConfigRende
rSupport)); | 1033 memcpy(fConfigRenderSupport, other.fConfigRenderSupport, sizeof(fConfigRende
rSupport)); |
1005 memcpy(fConfigTextureSupport, other.fConfigTextureSupport, sizeof(fConfigTex
tureSupport)); | 1034 memcpy(fConfigTextureSupport, other.fConfigTextureSupport, sizeof(fConfigTex
tureSupport)); |
1006 | 1035 |
1007 return *this; | 1036 return *this; |
(...skipping 15 matching lines...) Expand all Loading... |
1023 } | 1052 } |
1024 SkDEBUGCODE(flags &= ~GrDrawTargetCaps::kSubset_MapFlag); | 1053 SkDEBUGCODE(flags &= ~GrDrawTargetCaps::kSubset_MapFlag); |
1025 } | 1054 } |
1026 SkASSERT(0 == flags); // Make sure we handled all the flags. | 1055 SkASSERT(0 == flags); // Make sure we handled all the flags. |
1027 return str; | 1056 return str; |
1028 } | 1057 } |
1029 | 1058 |
1030 SkString GrDrawTargetCaps::dump() const { | 1059 SkString GrDrawTargetCaps::dump() const { |
1031 SkString r; | 1060 SkString r; |
1032 static const char* gNY[] = {"NO", "YES"}; | 1061 static const char* gNY[] = {"NO", "YES"}; |
1033 r.appendf("MIP Map Support : %s\n", gNY[fMipMapSupport]); | 1062 r.appendf("MIP Map Support : %s\n", gNY[fMipMapSupport]); |
1034 r.appendf("NPOT Texture Tile Support : %s\n", gNY[fNPOTTextureTileSupport
]); | 1063 r.appendf("NPOT Texture Tile Support : %s\n", gNY[fNPOTTextureTileS
upport]); |
1035 r.appendf("Two Sided Stencil Support : %s\n", gNY[fTwoSidedStencilSupport
]); | 1064 r.appendf("Two Sided Stencil Support : %s\n", gNY[fTwoSidedStencilS
upport]); |
1036 r.appendf("Stencil Wrap Ops Support : %s\n", gNY[fStencilWrapOpsSupport]
); | 1065 r.appendf("Stencil Wrap Ops Support : %s\n", gNY[fStencilWrapOpsSu
pport]); |
1037 r.appendf("HW AA Lines Support : %s\n", gNY[fHWAALineSupport]); | 1066 r.appendf("HW AA Lines Support : %s\n", gNY[fHWAALineSupport]
); |
1038 r.appendf("Shader Derivative Support : %s\n", gNY[fShaderDerivativeSuppor
t]); | 1067 r.appendf("Shader Derivative Support : %s\n", gNY[fShaderDerivative
Support]); |
1039 r.appendf("Geometry Shader Support : %s\n", gNY[fGeometryShaderSupport]
); | 1068 r.appendf("Geometry Shader Support : %s\n", gNY[fGeometryShaderSu
pport]); |
1040 r.appendf("Dual Source Blending Support : %s\n", gNY[fDualSourceBlendingSupp
ort]); | 1069 r.appendf("Dual Source Blending Support : %s\n", gNY[fDualSourceBlendi
ngSupport]); |
1041 r.appendf("Path Rendering Support : %s\n", gNY[fPathRenderingSupport])
; | 1070 r.appendf("Path Rendering Support : %s\n", gNY[fPathRenderingSup
port]); |
1042 r.appendf("Dst Read In Shader Support : %s\n", gNY[fDstReadInShaderSupport
]); | 1071 r.appendf("Dst Read In Shader Support : %s\n", gNY[fDstReadInShaderS
upport]); |
1043 r.appendf("Discard Render Target Support: %s\n", gNY[fDiscardRenderTargetSup
port]); | 1072 r.appendf("Discard Render Target Support : %s\n", gNY[fDiscardRenderTar
getSupport]); |
1044 r.appendf("Reuse Scratch Textures : %s\n", gNY[fReuseScratchTextures])
; | 1073 r.appendf("Reuse Scratch Textures : %s\n", gNY[fReuseScratchText
ures]); |
1045 r.appendf("Gpu Tracing Support : %s\n", gNY[fGpuTracingSupport]); | 1074 r.appendf("Gpu Tracing Support : %s\n", gNY[fGpuTracingSuppor
t]); |
1046 r.appendf("Compressed Update Support : %s\n", gNY[fCompressedTexSubImageS
upport]); | 1075 r.appendf("Compressed Update Support : %s\n", gNY[fCompressedTexSub
ImageSupport]); |
1047 r.appendf("Max Texture Size : %d\n", fMaxTextureSize); | |
1048 r.appendf("Max Render Target Size : %d\n", fMaxRenderTargetSize); | |
1049 r.appendf("Max Sample Count : %d\n", fMaxSampleCount); | |
1050 | 1076 |
1051 r.appendf("Map Buffer Support : %s\n", map_flags_to_string(fMapBuf
ferFlags).c_str()); | 1077 r.appendf("Draw Instead of Clear [workaround] : %s\n", gNY[fUseDrawInsteadOf
Clear]); |
| 1078 |
| 1079 r.appendf("Max Texture Size : %d\n", fMaxTextureSize); |
| 1080 r.appendf("Max Render Target Size : %d\n", fMaxRenderTargetSize)
; |
| 1081 r.appendf("Max Sample Count : %d\n", fMaxSampleCount); |
| 1082 |
| 1083 r.appendf("Map Buffer Support : %s\n", |
| 1084 map_flags_to_string(fMapBufferFlags).c_str()); |
1052 | 1085 |
1053 static const char* kConfigNames[] = { | 1086 static const char* kConfigNames[] = { |
1054 "Unknown", // kUnknown_GrPixelConfig | 1087 "Unknown", // kUnknown_GrPixelConfig |
1055 "Alpha8", // kAlpha_8_GrPixelConfig, | 1088 "Alpha8", // kAlpha_8_GrPixelConfig, |
1056 "Index8", // kIndex_8_GrPixelConfig, | 1089 "Index8", // kIndex_8_GrPixelConfig, |
1057 "RGB565", // kRGB_565_GrPixelConfig, | 1090 "RGB565", // kRGB_565_GrPixelConfig, |
1058 "RGBA444", // kRGBA_4444_GrPixelConfig, | 1091 "RGBA444", // kRGBA_4444_GrPixelConfig, |
1059 "RGBA8888", // kRGBA_8888_GrPixelConfig, | 1092 "RGBA8888", // kRGBA_8888_GrPixelConfig, |
1060 "BGRA8888", // kBGRA_8888_GrPixelConfig, | 1093 "BGRA8888", // kBGRA_8888_GrPixelConfig, |
1061 "ETC1", // kETC1_GrPixelConfig, | 1094 "ETC1", // kETC1_GrPixelConfig, |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1101 | 1134 |
1102 uint32_t GrDrawTargetCaps::CreateUniqueID() { | 1135 uint32_t GrDrawTargetCaps::CreateUniqueID() { |
1103 static int32_t gUniqueID = SK_InvalidUniqueID; | 1136 static int32_t gUniqueID = SK_InvalidUniqueID; |
1104 uint32_t id; | 1137 uint32_t id; |
1105 do { | 1138 do { |
1106 id = static_cast<uint32_t>(sk_atomic_inc(&gUniqueID) + 1); | 1139 id = static_cast<uint32_t>(sk_atomic_inc(&gUniqueID) + 1); |
1107 } while (id == SK_InvalidUniqueID); | 1140 } while (id == SK_InvalidUniqueID); |
1108 return id; | 1141 return id; |
1109 } | 1142 } |
1110 | 1143 |
OLD | NEW |