Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(943)

Unified Diff: src/gpu/gl/GrGLCaps.cpp

Issue 1264003002: SRGB read and write pixels working and unit test (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/gl/GrGLCaps.h ('k') | src/gpu/gl/GrGLGpu.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGLCaps.cpp
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index 318426b5bc42097ebb95ac8f04f96ec1914fab23..161dac6e9f3bb2ed988cd2ca458eee2003782da5 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -49,6 +49,7 @@ GrGLCaps::GrGLCaps(const GrContextOptions& contextOptions,
fIsCoreProfile = false;
fFullClearIsFree = false;
fBindFragDataLocationSupport = false;
+ fSRGBWriteControl = false;
fReadPixelsSupportedCache.reset();
@@ -191,6 +192,27 @@ void GrGLCaps::init(const GrContextOptions& contextOptions,
// can change based on which render target is bound
fTwoFormatLimit = kGLES_GrGLStandard == standard;
+ // We only enable srgb support if both textures and FBOs support srgb.
+ bool srgbSupport = false;
+ if (kGL_GrGLStandard == standard) {
+ if (ctxInfo.version() >= GR_GL_VER(3,0)) {
+ srgbSupport = true;
+ } else if (ctxInfo.hasExtension("GL_EXT_texture_sRGB")) {
+ if (ctxInfo.hasExtension("GL_ARB_framebuffer_sRGB") ||
+ ctxInfo.hasExtension("GL_EXT_framebuffer_sRGB")) {
+ srgbSupport = true;
+ }
+ }
+ // All the above srgb extensions support toggling srgb writes
+ fSRGBWriteControl = srgbSupport;
+ } else {
+ srgbSupport = ctxInfo.version() >= GR_GL_VER(3,0) ||
+ ctxInfo.hasExtension("GL_EXT_sRGB");
+ // ES through 3.1 requires EXT_srgb_write_control to support toggling
+ // sRGB writing for destinations.
+ fSRGBWriteControl = ctxInfo.hasExtension("GL_EXT_sRGB_write_control");
+ }
+
// Frag Coords Convention support is not part of ES
// Known issue on at least some Intel platforms:
// http://code.google.com/p/skia/issues/detail?id=946
@@ -455,8 +477,8 @@ void GrGLCaps::init(const GrContextOptions& contextOptions,
ctxInfo.hasExtension("GL_EXT_instanced_arrays"));
}
- this->initConfigTexturableTable(ctxInfo, gli);
- this->initConfigRenderableTable(ctxInfo);
+ this->initConfigTexturableTable(ctxInfo, gli, srgbSupport);
+ this->initConfigRenderableTable(ctxInfo, srgbSupport);
this->initShaderPrecisionTable(ctxInfo, gli, glslCaps);
this->applyOptionsOverrides(contextOptions);
@@ -496,7 +518,7 @@ bool GrGLCaps::hasPathRenderingSupport(const GrGLContextInfo& ctxInfo, const GrG
return true;
}
-void GrGLCaps::initConfigRenderableTable(const GrGLContextInfo& ctxInfo) {
+void GrGLCaps::initConfigRenderableTable(const GrGLContextInfo& ctxInfo, bool srgbSupport) {
// OpenGL < 3.0
// no support for render targets unless the GL_ARB_framebuffer_object
// extension is supported (in which case we get ALPHA, RED, RG, RGB,
@@ -574,21 +596,9 @@ void GrGLCaps::initConfigRenderableTable(const GrGLContextInfo& ctxInfo) {
}
}
- if (this->fRGBA8RenderbufferSupport && this->isConfigTexturable(kSRGBA_8888_GrPixelConfig)) {
- if (kGL_GrGLStandard == standard) {
- if (ctxInfo.version() >= GR_GL_VER(3,0) ||
- ctxInfo.hasExtension("GL_ARB_framebuffer_sRGB") ||
- ctxInfo.hasExtension("GL_EXT_framebuffer_sRGB")) {
- fConfigRenderSupport[kSRGBA_8888_GrPixelConfig][kNo_MSAA] = true;
- fConfigRenderSupport[kSRGBA_8888_GrPixelConfig][kYes_MSAA] = true;
- }
- } else {
- if (ctxInfo.version() >= GR_GL_VER(3,0) ||
- ctxInfo.hasExtension("GL_EXT_sRGB")) {
- fConfigRenderSupport[kSRGBA_8888_GrPixelConfig][kNo_MSAA] = true;
- fConfigRenderSupport[kSRGBA_8888_GrPixelConfig][kYes_MSAA] = true;
- }
- }
+ if (this->fRGBA8RenderbufferSupport && srgbSupport) {
+ fConfigRenderSupport[kSRGBA_8888_GrPixelConfig][kNo_MSAA] = true;
+ fConfigRenderSupport[kSRGBA_8888_GrPixelConfig][kYes_MSAA] = true;
}
if (this->isConfigTexturable(kRGBA_float_GrPixelConfig)) {
@@ -658,7 +668,8 @@ void GrGLCaps::initConfigRenderableTable(const GrGLContextInfo& ctxInfo) {
}
}
-void GrGLCaps::initConfigTexturableTable(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) {
+void GrGLCaps::initConfigTexturableTable(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli,
+ bool srgbSupport) {
GrGLStandard standard = ctxInfo.standard();
GrGLVersion version = ctxInfo.version();
@@ -697,14 +708,7 @@ void GrGLCaps::initConfigTexturableTable(const GrGLContextInfo& ctxInfo, const G
kSkia8888_GrPixelConfig != kBGRA_8888_GrPixelConfig);
}
- // Check for sRGBA
- if (kGL_GrGLStandard == standard) {
- fConfigTextureSupport[kSRGBA_8888_GrPixelConfig] =
- (version >= GR_GL_VER(3,0) || ctxInfo.hasExtension("GL_EXT_texture_sRGB"));
- } else {
- fConfigTextureSupport[kSRGBA_8888_GrPixelConfig] =
- (version >= GR_GL_VER(3,0) || ctxInfo.hasExtension("GL_EXT_sRGB"));
- }
+ fConfigTextureSupport[kSRGBA_8888_GrPixelConfig] = srgbSupport;
// Compressed texture support
@@ -1118,6 +1122,7 @@ SkString GrGLCaps::dump() const {
r.appendf("Use non-VBO for dynamic data: %s\n",
(fUseNonVBOVertexAndIndexDynamicData ? "YES" : "NO"));
r.appendf("Full screen clear is free: %s\n", (fFullClearIsFree ? "YES" : "NO"));
+ r.appendf("SRGB write contol: %s\n", (fSRGBWriteControl ? "YES" : "NO"));
return r;
}
« no previous file with comments | « src/gpu/gl/GrGLCaps.h ('k') | src/gpu/gl/GrGLGpu.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698