OLD | NEW |
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 "GrSWMaskHelper.h" | 8 #include "GrSWMaskHelper.h" |
9 | 9 |
10 #include "GrDrawState.h" | 10 #include "GrDrawState.h" |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 default: | 59 default: |
60 SkDEBUGFAIL("No GrPixelConfig for compression format!"); | 60 SkDEBUGFAIL("No GrPixelConfig for compression format!"); |
61 // Best guess | 61 // Best guess |
62 config = kAlpha_8_GrPixelConfig; | 62 config = kAlpha_8_GrPixelConfig; |
63 break; | 63 break; |
64 } | 64 } |
65 | 65 |
66 return config; | 66 return config; |
67 } | 67 } |
68 | 68 |
69 #if GR_COMPRESS_ALPHA_MASK | |
70 static bool choose_compressed_fmt(const GrDrawTargetCaps* caps, | 69 static bool choose_compressed_fmt(const GrDrawTargetCaps* caps, |
71 SkTextureCompressor::Format *fmt) { | 70 SkTextureCompressor::Format *fmt) { |
72 if (NULL == fmt) { | 71 if (NULL == fmt) { |
73 return false; | 72 return false; |
74 } | 73 } |
75 | 74 |
76 // We can't use scratch textures without the ability to update | 75 // We can't use scratch textures without the ability to update |
77 // compressed textures... | 76 // compressed textures... |
78 if (!(caps->compressedTexSubImageSupport())) { | 77 if (!(caps->compressedTexSubImageSupport())) { |
79 return false; | 78 return false; |
80 } | 79 } |
81 | 80 |
82 // Figure out what our preferred texture type is. If ASTC is available, that
always | 81 // Figure out what our preferred texture type is. If ASTC is available, that
always |
83 // gives the biggest win. Otherwise, in terms of compression speed and accur
acy, | 82 // gives the biggest win. Otherwise, in terms of compression speed and accur
acy, |
84 // LATC has a slight edge over R11 EAC. | 83 // LATC has a slight edge over R11 EAC. |
85 if (caps->isConfigTexturable(kASTC_12x12_GrPixelConfig)) { | 84 if (caps->isConfigTexturable(kASTC_12x12_GrPixelConfig)) { |
86 *fmt = SkTextureCompressor::kASTC_12x12_Format; | 85 *fmt = SkTextureCompressor::kASTC_12x12_Format; |
87 return true; | 86 return true; |
88 } else if (caps->isConfigTexturable(kLATC_GrPixelConfig)) { | 87 } else if (caps->isConfigTexturable(kLATC_GrPixelConfig)) { |
89 *fmt = SkTextureCompressor::kLATC_Format; | 88 *fmt = SkTextureCompressor::kLATC_Format; |
90 return true; | 89 return true; |
91 } else if (caps->isConfigTexturable(kR11_EAC_GrPixelConfig)) { | 90 } else if (caps->isConfigTexturable(kR11_EAC_GrPixelConfig)) { |
92 *fmt = SkTextureCompressor::kR11_EAC_Format; | 91 *fmt = SkTextureCompressor::kR11_EAC_Format; |
93 return true; | 92 return true; |
94 } | 93 } |
95 | 94 |
96 return false; | 95 return false; |
97 } | 96 } |
98 #endif | |
99 | 97 |
100 } | 98 } |
101 | 99 |
102 /** | 100 /** |
103 * Draw a single rect element of the clip stack into the accumulation bitmap | 101 * Draw a single rect element of the clip stack into the accumulation bitmap |
104 */ | 102 */ |
105 void GrSWMaskHelper::draw(const SkRect& rect, SkRegion::Op op, | 103 void GrSWMaskHelper::draw(const SkRect& rect, SkRegion::Op op, |
106 bool antiAlias, uint8_t alpha) { | 104 bool antiAlias, uint8_t alpha) { |
107 SkPaint paint; | 105 SkPaint paint; |
108 | 106 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 } else { | 162 } else { |
165 fMatrix.setIdentity(); | 163 fMatrix.setIdentity(); |
166 } | 164 } |
167 | 165 |
168 // Now translate so the bound's UL corner is at the origin | 166 // Now translate so the bound's UL corner is at the origin |
169 fMatrix.postTranslate(-resultBounds.fLeft * SK_Scalar1, | 167 fMatrix.postTranslate(-resultBounds.fLeft * SK_Scalar1, |
170 -resultBounds.fTop * SK_Scalar1); | 168 -resultBounds.fTop * SK_Scalar1); |
171 SkIRect bounds = SkIRect::MakeWH(resultBounds.width(), | 169 SkIRect bounds = SkIRect::MakeWH(resultBounds.width(), |
172 resultBounds.height()); | 170 resultBounds.height()); |
173 | 171 |
174 #if GR_COMPRESS_ALPHA_MASK | 172 if (fContext->getOptions().fDrawPathToCompressedTexture && |
175 if (choose_compressed_fmt(fContext->getGpu()->caps(), &fCompressedFormat)) { | 173 choose_compressed_fmt(fContext->getGpu()->caps(), &fCompressedFormat)) { |
176 fCompressionMode = kCompress_CompressionMode; | 174 fCompressionMode = kCompress_CompressionMode; |
177 } | 175 } |
178 #endif | |
179 | 176 |
180 // Make sure that the width is a multiple of the desired block dimensions | 177 // Make sure that the width is a multiple of the desired block dimensions |
181 // to allow for specialized SIMD instructions that compress multiple blocks
at a time. | 178 // to allow for specialized SIMD instructions that compress multiple blocks
at a time. |
182 int cmpWidth = bounds.fRight; | 179 int cmpWidth = bounds.fRight; |
183 int cmpHeight = bounds.fBottom; | 180 int cmpHeight = bounds.fBottom; |
184 if (kCompress_CompressionMode == fCompressionMode) { | 181 if (kCompress_CompressionMode == fCompressionMode) { |
185 int dimX, dimY; | 182 int dimX, dimY; |
186 SkTextureCompressor::GetBlockDimensions(fCompressedFormat, &dimX, &dimY)
; | 183 SkTextureCompressor::GetBlockDimensions(fCompressedFormat, &dimX, &dimY)
; |
187 cmpWidth = dimX * ((cmpWidth + (dimX - 1)) / dimX); | 184 cmpWidth = dimX * ((cmpWidth + (dimX - 1)) / dimX); |
188 cmpHeight = dimY * ((cmpHeight + (dimY - 1)) / dimY); | 185 cmpHeight = dimY * ((cmpHeight + (dimY - 1)) / dimY); |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 maskMatrix.preConcat(drawState->getViewMatrix()); | 358 maskMatrix.preConcat(drawState->getViewMatrix()); |
362 | 359 |
363 drawState->addCoverageEffect( | 360 drawState->addCoverageEffect( |
364 GrSimpleTextureEffect::Create(texture, | 361 GrSimpleTextureEffect::Create(texture, |
365 maskMatrix, | 362 maskMatrix, |
366 GrTextureParams::kNone_Fi
lterMode, | 363 GrTextureParams::kNone_Fi
lterMode, |
367 kPosition_GrCoordSet))->u
nref(); | 364 kPosition_GrCoordSet))->u
nref(); |
368 | 365 |
369 target->drawSimpleRect(dstRect); | 366 target->drawSimpleRect(dstRect); |
370 } | 367 } |
OLD | NEW |