| 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 "Test.h" | 8 #include "Test.h" |
| 9 | 9 |
| 10 // This test is specific to the GPU backend. | 10 // This test is specific to the GPU backend. |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 return; | 30 return; |
| 31 } | 31 } |
| 32 } | 32 } |
| 33 } | 33 } |
| 34 } | 34 } |
| 35 | 35 |
| 36 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadWriteAlpha, reporter, context) { | 36 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadWriteAlpha, reporter, context) { |
| 37 unsigned char alphaData[X_SIZE * Y_SIZE]; | 37 unsigned char alphaData[X_SIZE * Y_SIZE]; |
| 38 | 38 |
| 39 bool match; | 39 bool match; |
| 40 #ifdef SK_BUILD_FOR_WIN // TODO: Figure out why this breaks on Windows. | |
| 41 static const size_t kRowBytes[] = {0, X_SIZE}; | |
| 42 #else | |
| 43 static const size_t kRowBytes[] = {0, X_SIZE, X_SIZE + 1, 2 * X_SIZE - 1}; | 40 static const size_t kRowBytes[] = {0, X_SIZE, X_SIZE + 1, 2 * X_SIZE - 1}; |
| 44 #endif | |
| 45 for (int rt = 0; rt < 2; ++rt) { | 41 for (int rt = 0; rt < 2; ++rt) { |
| 46 GrSurfaceDesc desc; | 42 GrSurfaceDesc desc; |
| 47 // let Skia know we will be using this texture as a render target | 43 // let Skia know we will be using this texture as a render target |
| 48 desc.fFlags = rt ? kRenderTarget_GrSurfaceFlag : kNone_GrSurfaceFlag
s; | 44 desc.fFlags = rt ? kRenderTarget_GrSurfaceFlag : kNone_GrSurfaceFlag
s; |
| 49 // it is a single channel texture | 45 // it is a single channel texture |
| 50 desc.fConfig = kAlpha_8_GrPixelConfig; | 46 desc.fConfig = kAlpha_8_GrPixelConfig; |
| 51 desc.fWidth = X_SIZE; | 47 desc.fWidth = X_SIZE; |
| 52 desc.fHeight = Y_SIZE; | 48 desc.fHeight = Y_SIZE; |
| 53 | 49 |
| 54 // We are initializing the texture with zeros here | 50 // We are initializing the texture with zeros here |
| (...skipping 23 matching lines...) Expand all Loading... |
| 78 SkAutoTDeleteArray<uint8_t> readback(new uint8_t[nonZeroRowBytes * Y
_SIZE]); | 74 SkAutoTDeleteArray<uint8_t> readback(new uint8_t[nonZeroRowBytes * Y
_SIZE]); |
| 79 // clear readback to something non-zero so we can detect readback fa
ilures | 75 // clear readback to something non-zero so we can detect readback fa
ilures |
| 80 memset(readback.get(), 0x1, nonZeroRowBytes * Y_SIZE); | 76 memset(readback.get(), 0x1, nonZeroRowBytes * Y_SIZE); |
| 81 | 77 |
| 82 // read the texture back | 78 // read the texture back |
| 83 texture->readPixels(0, 0, desc.fWidth, desc.fHeight, desc.fConfig, | 79 texture->readPixels(0, 0, desc.fWidth, desc.fHeight, desc.fConfig, |
| 84 readback.get(), rowBytes); | 80 readback.get(), rowBytes); |
| 85 | 81 |
| 86 // make sure the original & read back versions match | 82 // make sure the original & read back versions match |
| 87 SkString msg; | 83 SkString msg; |
| 88 msg.printf("rt:%d, rb:%zd", rt, rowBytes); | 84 msg.printf("rt:%d, rb:%d", rt, SkToU32(rowBytes)); |
| 89 validate_alpha_data(reporter, X_SIZE, Y_SIZE, readback.get(), nonZer
oRowBytes, | 85 validate_alpha_data(reporter, X_SIZE, Y_SIZE, readback.get(), nonZer
oRowBytes, |
| 90 alphaData, msg); | 86 alphaData, msg); |
| 91 | 87 |
| 92 // Now try writing on the single channel texture (if we could create
as a RT). | 88 // Now try writing on the single channel texture (if we could create
as a RT). |
| 93 if (texture->asRenderTarget()) { | 89 if (texture->asRenderTarget()) { |
| 94 SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); | 90 SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); |
| 95 SkAutoTUnref<SkBaseDevice> device(SkGpuDevice::Create( | 91 SkAutoTUnref<SkBaseDevice> device(SkGpuDevice::Create( |
| 96 texture->asRenderTarget(), &props, SkGpuDevice::kUninit_Init
Contents)); | 92 texture->asRenderTarget(), &props, SkGpuDevice::kUninit_Init
Contents)); |
| 97 SkCanvas canvas(device); | 93 SkCanvas canvas(device); |
| 98 | 94 |
| 99 SkPaint paint; | 95 SkPaint paint; |
| 100 | 96 |
| 101 const SkRect rect = SkRect::MakeLTRB(-10, -10, X_SIZE + 10, Y_SI
ZE + 10); | 97 const SkRect rect = SkRect::MakeLTRB(-10, -10, X_SIZE + 10, Y_SI
ZE + 10); |
| 102 | 98 |
| 103 paint.setColor(SK_ColorWHITE); | 99 paint.setColor(SK_ColorWHITE); |
| 104 | 100 |
| 105 canvas.drawRect(rect, paint); | 101 canvas.drawRect(rect, paint); |
| 106 | 102 |
| 107 memset(readback.get(), 0x1, nonZeroRowBytes * Y_SIZE); | 103 memset(readback.get(), 0x1, nonZeroRowBytes * Y_SIZE); |
| 108 texture->readPixels(0, 0, desc.fWidth, desc.fHeight, desc.fConfi
g, readback.get(), | 104 texture->readPixels(0, 0, desc.fWidth, desc.fHeight, desc.fConfi
g, readback.get(), |
| 109 rowBytes); | 105 rowBytes); |
| 110 | 106 |
| 111 match = true; | 107 match = true; |
| 112 for (int y = 0; y < Y_SIZE && match; ++y) { | 108 for (int y = 0; y < Y_SIZE && match; ++y) { |
| 113 for (int x = 0; x < X_SIZE && match; ++x) { | 109 for (int x = 0; x < X_SIZE && match; ++x) { |
| 114 uint8_t rbValue = readback.get()[y * nonZeroRowBytes + x
]; | 110 uint8_t rbValue = readback.get()[y * nonZeroRowBytes + x
]; |
| 115 if (0xFF != rbValue) { | 111 if (0xFF != rbValue) { |
| 116 ERRORF(reporter, | 112 ERRORF(reporter, |
| 117 "Failed alpha readback after clear. Expected:
0xFF, Got: 0x%02x" | 113 "Failed alpha readback after clear. Expected:
0xFF, Got: 0x%02x" |
| 118 " at (%d,%d), rb:%zd", rbValue, x, y, rowByte
s); | 114 " at (%d,%d), rb:%d", rbValue, x, y, SkToU32(
rowBytes)); |
| 119 match = false; | 115 match = false; |
| 120 } | 116 } |
| 121 } | 117 } |
| 122 } | 118 } |
| 123 } | 119 } |
| 124 } | 120 } |
| 125 } | 121 } |
| 126 | 122 |
| 127 static const GrPixelConfig kRGBAConfigs[] { | 123 static const GrPixelConfig kRGBAConfigs[] { |
| 128 kRGBA_8888_GrPixelConfig, | 124 kRGBA_8888_GrPixelConfig, |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 SkAutoTDeleteArray<uint8_t> readback(new uint8_t[nonZeroRowBytes
* Y_SIZE]); | 165 SkAutoTDeleteArray<uint8_t> readback(new uint8_t[nonZeroRowBytes
* Y_SIZE]); |
| 170 // Clear so we don't accidentally see values from previous itera
tion. | 166 // Clear so we don't accidentally see values from previous itera
tion. |
| 171 memset(readback.get(), 0x0, nonZeroRowBytes * Y_SIZE); | 167 memset(readback.get(), 0x0, nonZeroRowBytes * Y_SIZE); |
| 172 | 168 |
| 173 // read the texture back | 169 // read the texture back |
| 174 texture->readPixels(0, 0, desc.fWidth, desc.fHeight, kAlpha_8_Gr
PixelConfig, | 170 texture->readPixels(0, 0, desc.fWidth, desc.fHeight, kAlpha_8_Gr
PixelConfig, |
| 175 readback.get(), rowBytes); | 171 readback.get(), rowBytes); |
| 176 | 172 |
| 177 // make sure the original & read back versions match | 173 // make sure the original & read back versions match |
| 178 SkString msg; | 174 SkString msg; |
| 179 msg.printf("rt:%d, rb:%zd", rt, rowBytes); | 175 msg.printf("rt:%d, rb:%d", rt, SkToU32(rowBytes)); |
| 180 validate_alpha_data(reporter, X_SIZE, Y_SIZE, readback.get(), no
nZeroRowBytes, | 176 validate_alpha_data(reporter, X_SIZE, Y_SIZE, readback.get(), no
nZeroRowBytes, |
| 181 alphaData, msg); | 177 alphaData, msg); |
| 182 } | 178 } |
| 183 } | 179 } |
| 184 } | 180 } |
| 185 } | 181 } |
| 186 | 182 |
| 187 #endif | 183 #endif |
| OLD | NEW |