aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/gl
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-05-23 19:02:57 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-05-23 19:03:01 +0000
commita9e795eab5f59a52d96b8fdc39351452835f5eb9 (patch)
tree485e9f49fdb82f416014eea8d7fb397938466fd9 /src/gpu/gl
parente8fa42768106bd7f4ca7bf5c72dde442a29d43cf (diff)
Revert "Add a flag to GrSurfaceFlags that requires the texture to be cleared upon creation. "
This reverts commit 45e5068a6d10f4e4fd4658824310f8871f02ccf7. Reason for revert: :'( Original change's description: > Add a flag to GrSurfaceFlags that requires the texture to be cleared upon creation. > > Bug: chromium:656320 > > Change-Id: I940bfa24540516ab83a2ed52f761b96eb6ad19f1 > Reviewed-on: https://skia-review.googlesource.com/17391 > Reviewed-by: Greg Daniel <egdaniel@google.com> > Commit-Queue: Brian Salomon <bsalomon@google.com> > TBR=egdaniel@google.com,bsalomon@google.com,robertphillips@google.com NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Bug: chromium:656320 Change-Id: I8a4f71537e45f3c4cf37b10b2dc8ee38fe6959ba Reviewed-on: https://skia-review.googlesource.com/17765 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/gl')
-rw-r--r--src/gpu/gl/GrGLAssembleInterface.cpp8
-rw-r--r--src/gpu/gl/GrGLCaps.cpp9
-rw-r--r--src/gpu/gl/GrGLCaps.h4
-rw-r--r--src/gpu/gl/GrGLGpu.cpp45
-rw-r--r--src/gpu/gl/GrGLGpu.h6
5 files changed, 6 insertions, 66 deletions
diff --git a/src/gpu/gl/GrGLAssembleInterface.cpp b/src/gpu/gl/GrGLAssembleInterface.cpp
index 7305696567..7914934eac 100644
--- a/src/gpu/gl/GrGLAssembleInterface.cpp
+++ b/src/gpu/gl/GrGLAssembleInterface.cpp
@@ -105,10 +105,6 @@ const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) {
GET_PROC(Clear);
GET_PROC(ClearColor);
GET_PROC(ClearStencil);
- if (glVer >= GR_GL_VER(4,4) || extensions.has("GL_ARB_clear_texture")) {
- GET_PROC(ClearTexImage);
- GET_PROC(ClearTexSubImage);
- }
GET_PROC(ColorMask);
GET_PROC(CompileShader);
GET_PROC(CompressedTexImage2D);
@@ -588,10 +584,6 @@ const GrGLInterface* GrGLAssembleGLESInterface(void* ctx, GrGLGetProc get) {
GET_PROC(Clear);
GET_PROC(ClearColor);
GET_PROC(ClearStencil);
- if (extensions.has("GL_EXT_clear_texture")) {
- GET_PROC_SUFFIX(ClearTexImage, EXT);
- GET_PROC_SUFFIX(ClearTexSubImage, EXT);
- }
GET_PROC(ColorMask);
GET_PROC(CompileShader);
GET_PROC(CompressedTexImage2D);
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index 0d84a72121..b9eee088e0 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -54,7 +54,6 @@ GrGLCaps::GrGLCaps(const GrContextOptions& contextOptions,
fSRGBDecodeDisableSupport = false;
fSRGBDecodeDisableAffectsMipmaps = false;
fClearToBoundaryValuesIsBroken = false;
- fClearTextureSupport = false;
fDrawArraysBaseVertexIsBroken = false;
fBlitFramebufferFlags = kNoSupport_BlitFramebufferFlag;
@@ -253,14 +252,6 @@ void GrGLCaps::init(const GrContextOptions& contextOptions,
// vis-versa.
fRGBAToBGRAReadbackConversionsAreSlow = isMESA || isMAC;
- if (kGL_GrGLStandard == standard) {
- if (version >= GR_GL_VER(4,4) || ctxInfo.hasExtension("GL_ARB_clear_texture")) {
- fClearTextureSupport = true;
- }
- } else if (ctxInfo.hasExtension("GL_EXT_clear_texture")) {
- fClearTextureSupport = true;
- }
-
/**************************************************************************
* GrShaderCaps fields
**************************************************************************/
diff --git a/src/gpu/gl/GrGLCaps.h b/src/gpu/gl/GrGLCaps.h
index b7273a08b1..3059ea7149 100644
--- a/src/gpu/gl/GrGLCaps.h
+++ b/src/gpu/gl/GrGLCaps.h
@@ -360,9 +360,6 @@ public:
// Certain Intel GPUs on Mac fail to clear if the glClearColor is made up of only 1s and 0s.
bool clearToBoundaryValuesIsBroken() const { return fClearToBoundaryValuesIsBroken; }
- /// glClearTex(Sub)Image support
- bool clearTextureSupport() const { return fClearTextureSupport; }
-
// Adreno/MSAA drops a draw on the imagefiltersbase GM if the base vertex param to
// glDrawArrays is nonzero.
// https://bugs.chromium.org/p/skia/issues/detail?id=6650
@@ -440,7 +437,6 @@ private:
bool fSRGBDecodeDisableSupport : 1;
bool fSRGBDecodeDisableAffectsMipmaps : 1;
bool fClearToBoundaryValuesIsBroken : 1;
- bool fClearTextureSupport : 1;
bool fDrawArraysBaseVertexIsBroken : 1;
uint32_t fBlitFramebufferFlags;
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index 81ee87c5e0..565e60a220 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -1320,44 +1320,24 @@ static void set_initial_texture_params(const GrGLInterface* interface,
GrTexture* GrGLGpu::onCreateTexture(const GrSurfaceDesc& desc,
SkBudgeted budgeted,
- const SkTArray<GrMipLevel>& origTexels) {
+ const SkTArray<GrMipLevel>& texels) {
// We fail if the MSAA was requested and is not available.
if (GrGLCaps::kNone_MSFBOType == this->glCaps().msFBOType() && desc.fSampleCnt) {
//SkDebugf("MSAA RT requested but not supported on this platform.");
return return_null_texture();
}
- bool performClear = (desc.fFlags & kPerformInitialClear_GrSurfaceFlag);
- const SkTArray<GrMipLevel>* texels = &origTexels;
-
- SkTArray<GrMipLevel> zeroLevels;
- std::unique_ptr<uint8_t[]> zeros;
- // TODO: remove the GrPixelConfigIsSint test. This is here because we have yet to add support
- // for glClearBuffer* which must be used instead of glClearColor/glClear for integer FBO
- // attachments.
- if (performClear && !this->glCaps().clearTextureSupport() &&
- (!this->glCaps().canConfigBeFBOColorAttachment(desc.fConfig) ||
- GrPixelConfigIsSint(desc.fConfig))) {
- size_t rowSize = GrBytesPerPixel(desc.fConfig) * desc.fWidth;
- size_t size = rowSize * desc.fHeight;
- zeros.reset(new uint8_t[size]);
- memset(zeros.get(), 0, size);
- zeroLevels.push_back(GrMipLevel{zeros.get(), 0});
- texels = &zeroLevels;
- performClear = false;
- }
-
bool isRenderTarget = SkToBool(desc.fFlags & kRenderTarget_GrSurfaceFlag);
GrGLTexture::IDDesc idDesc;
idDesc.fOwnership = GrBackendObjectOwnership::kOwned;
GrGLTexture::TexParams initialTexParams;
- if (!this->createTextureImpl(desc, &idDesc.fInfo, isRenderTarget, &initialTexParams, *texels)) {
+ if (!this->createTextureImpl(desc, &idDesc.fInfo, isRenderTarget, &initialTexParams, texels)) {
return return_null_texture();
}
bool wasMipMapDataProvided = false;
- if (texels->count() > 1) {
+ if (texels.count() > 1) {
wasMipMapDataProvided = true;
}
@@ -1381,25 +1361,6 @@ GrTexture* GrGLGpu::onCreateTexture(const GrSurfaceDesc& desc,
SkDebugf("--- new texture [%d] size=(%d %d) config=%d\n",
idDesc.fInfo.fID, desc.fWidth, desc.fHeight, desc.fConfig);
#endif
- if (tex && performClear) {
- if (this->glCaps().clearTextureSupport()) {
- GrGLenum format = GrPixelConfigIsSint(tex->config()) ? GR_GL_RGBA_INTEGER : GR_GL_RGBA;
- static constexpr uint32_t kZero = 0;
- GL_CALL(ClearTexImage(tex->textureID(), 0, format, GR_GL_UNSIGNED_BYTE, &kZero));
- } else {
- SkASSERT(!GrPixelConfigIsSint(desc.fConfig));
- GrGLIRect viewport;
- this->bindSurfaceFBOForPixelOps(tex, GR_GL_FRAMEBUFFER, &viewport, kDst_TempFBOTarget);
- this->disableScissor();
- this->disableWindowRectangles();
- GL_CALL(ColorMask(GR_GL_TRUE, GR_GL_TRUE, GR_GL_TRUE, GR_GL_TRUE));
- fHWWriteToColor = kYes_TriState;
- GL_CALL(ClearColor(0, 0, 0, 0));
- GL_CALL(Clear(GR_GL_COLOR_BUFFER_BIT));
- this->unbindTextureFBOForPixelOps(GR_GL_FRAMEBUFFER, tex);
- fHWBoundRenderTargetUniqueID.makeInvalid();
- }
- }
return tex;
}
diff --git a/src/gpu/gl/GrGLGpu.h b/src/gpu/gl/GrGLGpu.h
index d19f2ef6ee..a4706c79ed 100644
--- a/src/gpu/gl/GrGLGpu.h
+++ b/src/gpu/gl/GrGLGpu.h
@@ -371,9 +371,9 @@ private:
kDst_TempFBOTarget
};
- // Binds a surface as a FBO for copying, reading, or clearing. If the surface already owns an
- // FBO ID then that ID is bound. If not the surface is temporarily bound to a FBO and that FBO
- // is bound. This must be paired with a call to unbindSurfaceFBOForPixelOps().
+ // Binds a surface as a FBO for copying or reading. If the surface already owns an FBO ID then
+ // that ID is bound. If not the surface is temporarily bound to a FBO and that FBO is bound.
+ // This must be paired with a call to unbindSurfaceFBOForPixelOps().
void bindSurfaceFBOForPixelOps(GrSurface* surface, GrGLenum fboTarget, GrGLIRect* viewport,
TempFBOTarget tempFBOTarget);