OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 | 8 |
9 #include "GrGLGpu.h" | 9 #include "GrGLGpu.h" |
10 #include "GrGLGLSL.h" | 10 #include "GrGLGLSL.h" |
(...skipping 1166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1177 (GrGLint*)&format->fTotalBits); | 1177 (GrGLint*)&format->fTotalBits); |
1178 format->fTotalBits += format->fStencilBits; | 1178 format->fTotalBits += format->fStencilBits; |
1179 } else { | 1179 } else { |
1180 format->fTotalBits = format->fStencilBits; | 1180 format->fTotalBits = format->fStencilBits; |
1181 } | 1181 } |
1182 } | 1182 } |
1183 } | 1183 } |
1184 } | 1184 } |
1185 | 1185 |
1186 int GrGLGpu::getCompatibleStencilIndex(GrPixelConfig config) { | 1186 int GrGLGpu::getCompatibleStencilIndex(GrPixelConfig config) { |
1187 int size = this->caps()->minTextureSize(); | 1187 static const int kSize = 16; |
1188 if (kUnknownStencilIndex == fPixelConfigToStencilIndex[config]) { | 1188 if (kUnknownStencilIndex == fPixelConfigToStencilIndex[config]) { |
1189 // Default to unsupported | 1189 // Default to unsupported |
1190 fPixelConfigToStencilIndex[config] = kUnsupportedStencilIndex; | 1190 fPixelConfigToStencilIndex[config] = kUnsupportedStencilIndex; |
1191 // Create color texture | 1191 // Create color texture |
1192 GrGLuint colorID; | 1192 GrGLuint colorID; |
1193 GL_CALL(GenTextures(1, &colorID)); | 1193 GL_CALL(GenTextures(1, &colorID)); |
1194 this->setScratchTextureUnit(); | 1194 this->setScratchTextureUnit(); |
1195 GL_CALL(BindTexture(GR_GL_TEXTURE_2D, colorID)); | 1195 GL_CALL(BindTexture(GR_GL_TEXTURE_2D, colorID)); |
1196 GL_CALL(TexParameteri(GR_GL_TEXTURE_2D, | 1196 GL_CALL(TexParameteri(GR_GL_TEXTURE_2D, |
1197 GR_GL_TEXTURE_MAG_FILTER, | 1197 GR_GL_TEXTURE_MAG_FILTER, |
(...skipping 21 matching lines...) Expand all Loading... |
1219 if (!this->configToGLFormats(config, useSizedFormat, &internalFormat, | 1219 if (!this->configToGLFormats(config, useSizedFormat, &internalFormat, |
1220 &externalFormat, &externalType)) { | 1220 &externalFormat, &externalType)) { |
1221 GL_CALL(DeleteTextures(1, &colorID)); | 1221 GL_CALL(DeleteTextures(1, &colorID)); |
1222 fPixelConfigToStencilIndex[config] = kUnsupportedStencilIndex; | 1222 fPixelConfigToStencilIndex[config] = kUnsupportedStencilIndex; |
1223 return kUnsupportedStencilIndex; | 1223 return kUnsupportedStencilIndex; |
1224 } | 1224 } |
1225 | 1225 |
1226 CLEAR_ERROR_BEFORE_ALLOC(this->glInterface()); | 1226 CLEAR_ERROR_BEFORE_ALLOC(this->glInterface()); |
1227 GL_ALLOC_CALL(this->glInterface(), TexImage2D(GR_GL_TEXTURE_2D, | 1227 GL_ALLOC_CALL(this->glInterface(), TexImage2D(GR_GL_TEXTURE_2D, |
1228 0, internalFormat, | 1228 0, internalFormat, |
1229 size, | 1229 kSize, |
1230 size, | 1230 kSize, |
1231 0, | 1231 0, |
1232 externalFormat, | 1232 externalFormat, |
1233 externalType, | 1233 externalType, |
1234 NULL)); | 1234 NULL)); |
1235 if (GR_GL_NO_ERROR != GR_GL_GET_ERROR(this->glInterface())) { | 1235 if (GR_GL_NO_ERROR != GR_GL_GET_ERROR(this->glInterface())) { |
1236 GL_CALL(DeleteTextures(1, &colorID)); | 1236 GL_CALL(DeleteTextures(1, &colorID)); |
1237 fPixelConfigToStencilIndex[config] = kUnsupportedStencilIndex; | 1237 fPixelConfigToStencilIndex[config] = kUnsupportedStencilIndex; |
1238 return kUnsupportedStencilIndex; | 1238 return kUnsupportedStencilIndex; |
1239 } | 1239 } |
1240 | 1240 |
(...skipping 18 matching lines...) Expand all Loading... |
1259 const GrGLCaps::StencilFormat& sFmt = this->glCaps().stencilFormats(
)[i]; | 1259 const GrGLCaps::StencilFormat& sFmt = this->glCaps().stencilFormats(
)[i]; |
1260 | 1260 |
1261 GL_CALL(GenRenderbuffers(1, &sbRBID)); | 1261 GL_CALL(GenRenderbuffers(1, &sbRBID)); |
1262 if (!sbRBID) { | 1262 if (!sbRBID) { |
1263 break; | 1263 break; |
1264 } | 1264 } |
1265 GL_CALL(BindRenderbuffer(GR_GL_RENDERBUFFER, sbRBID)); | 1265 GL_CALL(BindRenderbuffer(GR_GL_RENDERBUFFER, sbRBID)); |
1266 CLEAR_ERROR_BEFORE_ALLOC(this->glInterface()); | 1266 CLEAR_ERROR_BEFORE_ALLOC(this->glInterface()); |
1267 GL_ALLOC_CALL(this->glInterface(), RenderbufferStorage(GR_GL_RENDERB
UFFER, | 1267 GL_ALLOC_CALL(this->glInterface(), RenderbufferStorage(GR_GL_RENDERB
UFFER, |
1268 sFmt.fInterna
lFormat, | 1268 sFmt.fInterna
lFormat, |
1269 size, size)); | 1269 kSize, kSize)
); |
1270 if (GR_GL_NO_ERROR == GR_GL_GET_ERROR(this->glInterface())) { | 1270 if (GR_GL_NO_ERROR == GR_GL_GET_ERROR(this->glInterface())) { |
1271 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, | 1271 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, |
1272 GR_GL_STENCIL_ATTACHMENT, | 1272 GR_GL_STENCIL_ATTACHMENT, |
1273 GR_GL_RENDERBUFFER, sbRBID)); | 1273 GR_GL_RENDERBUFFER, sbRBID)); |
1274 if (sFmt.fPacked) { | 1274 if (sFmt.fPacked) { |
1275 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, | 1275 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, |
1276 GR_GL_DEPTH_ATTACHMENT, | 1276 GR_GL_DEPTH_ATTACHMENT, |
1277 GR_GL_RENDERBUFFER, sbRBID))
; | 1277 GR_GL_RENDERBUFFER, sbRBID))
; |
1278 } else { | 1278 } else { |
1279 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, | 1279 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, |
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1811 | 1811 |
1812 static bool read_pixels_pays_for_y_flip(GrRenderTarget* renderTarget, const GrGL
Caps& caps, | 1812 static bool read_pixels_pays_for_y_flip(GrRenderTarget* renderTarget, const GrGL
Caps& caps, |
1813 int width, int height, GrPixelConfig co
nfig, | 1813 int width, int height, GrPixelConfig co
nfig, |
1814 size_t rowBytes) { | 1814 size_t rowBytes) { |
1815 // If this render target is already TopLeft, we don't need to flip. | 1815 // If this render target is already TopLeft, we don't need to flip. |
1816 if (kTopLeft_GrSurfaceOrigin == renderTarget->origin()) { | 1816 if (kTopLeft_GrSurfaceOrigin == renderTarget->origin()) { |
1817 return false; | 1817 return false; |
1818 } | 1818 } |
1819 | 1819 |
1820 // If the read is really small or smaller than the min texture size, don't f
orce a draw. | 1820 // If the read is really small or smaller than the min texture size, don't f
orce a draw. |
1821 int minSize = SkTMax(32, caps.minTextureSize()); | 1821 static const int kMinSize = 32; |
1822 if (width < minSize || height < minSize) { | 1822 if (width < kMinSize || height < kMinSize) { |
1823 return false; | 1823 return false; |
1824 } | 1824 } |
1825 | 1825 |
1826 // if GL can do the flip then we'll never pay for it. | 1826 // if GL can do the flip then we'll never pay for it. |
1827 if (caps.packFlipYSupport()) { | 1827 if (caps.packFlipYSupport()) { |
1828 return false; | 1828 return false; |
1829 } | 1829 } |
1830 | 1830 |
1831 // If we have to do memcpy to handle non-trim rowBytes then we | 1831 // If we have to do memcpy to handle non-trim rowBytes then we |
1832 // get the flip for free. Otherwise it costs. | 1832 // get the flip for free. Otherwise it costs. |
(...skipping 17 matching lines...) Expand all Loading... |
1850 | 1850 |
1851 tempDrawInfo->fSwapRAndB = false; | 1851 tempDrawInfo->fSwapRAndB = false; |
1852 | 1852 |
1853 // These settings we will always want if a temp draw is performed. The confi
g is set below | 1853 // These settings we will always want if a temp draw is performed. The confi
g is set below |
1854 // depending on whether we want to do a R/B swap or not. | 1854 // depending on whether we want to do a R/B swap or not. |
1855 tempDrawInfo->fTempSurfaceDesc.fFlags = kRenderTarget_GrSurfaceFlag; | 1855 tempDrawInfo->fTempSurfaceDesc.fFlags = kRenderTarget_GrSurfaceFlag; |
1856 tempDrawInfo->fTempSurfaceDesc.fWidth = width; | 1856 tempDrawInfo->fTempSurfaceDesc.fWidth = width; |
1857 tempDrawInfo->fTempSurfaceDesc.fHeight = height; | 1857 tempDrawInfo->fTempSurfaceDesc.fHeight = height; |
1858 tempDrawInfo->fTempSurfaceDesc.fSampleCnt = 0; | 1858 tempDrawInfo->fTempSurfaceDesc.fSampleCnt = 0; |
1859 tempDrawInfo->fTempSurfaceDesc.fOrigin = kTopLeft_GrSurfaceOrigin; // no CPU
y-flip for TL. | 1859 tempDrawInfo->fTempSurfaceDesc.fOrigin = kTopLeft_GrSurfaceOrigin; // no CPU
y-flip for TL. |
1860 tempDrawInfo->fUseExactScratch = this->glCaps().partialFBOReadIsSlow() && | 1860 tempDrawInfo->fUseExactScratch = this->glCaps().partialFBOReadIsSlow(); |
1861 width >= this->caps()->minTextureSize() && | |
1862 height >= this->caps()->minTextureSize(); | |
1863 | 1861 |
1864 // Start off assuming that any temp draw should be to the readConfig, then c
heck if that will | 1862 // Start off assuming that any temp draw should be to the readConfig, then c
heck if that will |
1865 // be inefficient. | 1863 // be inefficient. |
1866 GrPixelConfig srcConfig = srcSurface->config(); | 1864 GrPixelConfig srcConfig = srcSurface->config(); |
1867 tempDrawInfo->fTempSurfaceDesc.fConfig = readConfig; | 1865 tempDrawInfo->fTempSurfaceDesc.fConfig = readConfig; |
1868 | 1866 |
1869 if (this->glCaps().rgba8888PixelsOpsAreSlow() && kRGBA_8888_GrPixelConfig ==
readConfig) { | 1867 if (this->glCaps().rgba8888PixelsOpsAreSlow() && kRGBA_8888_GrPixelConfig ==
readConfig) { |
1870 tempDrawInfo->fTempSurfaceDesc.fConfig = kBGRA_8888_GrPixelConfig; | 1868 tempDrawInfo->fTempSurfaceDesc.fConfig = kBGRA_8888_GrPixelConfig; |
1871 tempDrawInfo->fSwapRAndB = true; | 1869 tempDrawInfo->fSwapRAndB = true; |
1872 ElevateDrawPreference(drawPreference, kGpuPrefersDraw_DrawPreference); | 1870 ElevateDrawPreference(drawPreference, kGpuPrefersDraw_DrawPreference); |
(...skipping 1424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3297 this->setVertexArrayID(gpu, 0); | 3295 this->setVertexArrayID(gpu, 0); |
3298 } | 3296 } |
3299 int attrCount = gpu->glCaps().maxVertexAttributes(); | 3297 int attrCount = gpu->glCaps().maxVertexAttributes(); |
3300 if (fDefaultVertexArrayAttribState.count() != attrCount) { | 3298 if (fDefaultVertexArrayAttribState.count() != attrCount) { |
3301 fDefaultVertexArrayAttribState.resize(attrCount); | 3299 fDefaultVertexArrayAttribState.resize(attrCount); |
3302 } | 3300 } |
3303 attribState = &fDefaultVertexArrayAttribState; | 3301 attribState = &fDefaultVertexArrayAttribState; |
3304 } | 3302 } |
3305 return attribState; | 3303 return attribState; |
3306 } | 3304 } |
OLD | NEW |