aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrian Salomon <bsalomon@google.com>2019-01-28 09:05:22 -0500
committerSkia Commit-Bot <skia-commit-bot@chromium.org>2019-01-28 14:39:43 +0000
commit8bc352c30542e1e01d84e652fee89a01d3248df8 (patch)
tree71e3e81cb129ce2413802a591e2f9c1c85b86d64 /src
parentfd0bba81c0b2b38b8462f8ad91ec1a22b606d490 (diff)
downloadskqp-8bc352c30542e1e01d84e652fee89a01d3248df8.tar.gz
Revert "Revert "Avoid checking extension string in GrGLGpu::onResetContext.""
This reverts commit 04c1cccaa45e8a96fcc82f027435b50093b935ea. Reland that preserves GL_NV_shader_framebuffer_fetch support. Change-Id: I8d51321a552d0abfd0a8fa36c4d00b9b0e0d8663 Reviewed-on: https://skia-review.googlesource.com/c/187300 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/gpu/gl/GrGLCaps.cpp16
-rw-r--r--src/gpu/gl/GrGLCaps.h3
-rw-r--r--src/gpu/gl/GrGLDefines.h2
-rw-r--r--src/gpu/gl/GrGLGpu.cpp4
4 files changed, 16 insertions, 9 deletions
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index 04ef735f8d..faa8e38468 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -68,6 +68,7 @@ GrGLCaps::GrGLCaps(const GrContextOptions& contextOptions,
fDontSetBaseOrMaxLevelForExternalTextures = false;
fProgramBinarySupport = false;
fSamplerObjectSupport = false;
+ fFBFetchRequiresEnablePerSample = false;
fBlitFramebufferFlags = kNoSupport_BlitFramebufferFlag;
fMaxInstancesPerDrawWithoutCrashing = 0;
@@ -708,25 +709,28 @@ void GrGLCaps::initGLSL(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli
GrShaderCaps* shaderCaps = fShaderCaps.get();
shaderCaps->fGLSLGeneration = ctxInfo.glslGeneration();
if (kGLES_GrGLStandard == standard) {
+ // fFBFetchRequiresEnablePerSample is not a shader cap but is initialized below to keep it
+ // with related FB fetch logic.
if (ctxInfo.hasExtension("GL_EXT_shader_framebuffer_fetch")) {
shaderCaps->fFBFetchNeedsCustomOutput = (version >= GR_GL_VER(3, 0));
shaderCaps->fFBFetchSupport = true;
shaderCaps->fFBFetchColorName = "gl_LastFragData[0]";
shaderCaps->fFBFetchExtensionString = "GL_EXT_shader_framebuffer_fetch";
- }
- else if (ctxInfo.hasExtension("GL_NV_shader_framebuffer_fetch")) {
- // Actually, we haven't seen an ES3.0 device with this extension yet, so we don't know
+ fFBFetchRequiresEnablePerSample = false;
+ } else if (ctxInfo.hasExtension("GL_NV_shader_framebuffer_fetch")) {
+ // Actually, we haven't seen an ES3.0 device with this extension yet, so we don't know.
shaderCaps->fFBFetchNeedsCustomOutput = false;
shaderCaps->fFBFetchSupport = true;
shaderCaps->fFBFetchColorName = "gl_LastFragData[0]";
shaderCaps->fFBFetchExtensionString = "GL_NV_shader_framebuffer_fetch";
- }
- else if (ctxInfo.hasExtension("GL_ARM_shader_framebuffer_fetch")) {
- // The arm extension also requires an additional flag which we will set onResetContext
+ fFBFetchRequiresEnablePerSample = false;
+ } else if (ctxInfo.hasExtension("GL_ARM_shader_framebuffer_fetch")) {
+ // The arm extension also requires an additional flag which we will set onResetContext.
shaderCaps->fFBFetchNeedsCustomOutput = false;
shaderCaps->fFBFetchSupport = true;
shaderCaps->fFBFetchColorName = "gl_LastFragColorARM";
shaderCaps->fFBFetchExtensionString = "GL_ARM_shader_framebuffer_fetch";
+ fFBFetchRequiresEnablePerSample = true;
}
shaderCaps->fUsesPrecisionModifiers = true;
}
diff --git a/src/gpu/gl/GrGLCaps.h b/src/gpu/gl/GrGLCaps.h
index 1d42f0dd47..4a97e84cf8 100644
--- a/src/gpu/gl/GrGLCaps.h
+++ b/src/gpu/gl/GrGLCaps.h
@@ -417,6 +417,8 @@ public:
bool samplerObjectSupport() const { return fSamplerObjectSupport; }
+ bool fbFetchRequiresEnablePerSample() const { return fFBFetchRequiresEnablePerSample; }
+
GrPixelConfig validateBackendRenderTarget(const GrBackendRenderTarget&,
SkColorType) const override;
@@ -503,6 +505,7 @@ private:
bool fClearTextureSupport : 1;
bool fProgramBinarySupport : 1;
bool fSamplerObjectSupport : 1;
+ bool fFBFetchRequiresEnablePerSample : 1;
// Driver workarounds
bool fDoManualMipmapping : 1;
diff --git a/src/gpu/gl/GrGLDefines.h b/src/gpu/gl/GrGLDefines.h
index a545e457e8..995dbf3da1 100644
--- a/src/gpu/gl/GrGLDefines.h
+++ b/src/gpu/gl/GrGLDefines.h
@@ -987,7 +987,7 @@
#define GR_GL_PATH_MODELVIEW 0x1700
/* ARM specific define for MSAA support on framebuffer fetch */
-#define GR_GL_FETCH_PER_SAMPLE_ARM 0x8F65
+#define GR_GL_FETCH_PER_SAMPLE 0x8F65
/* GL_EXT_raster_multisample */
#define GR_GL_RASTER_MULTISAMPLE 0x9327
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index 34b27d2136..e8bf4f298d 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -539,10 +539,10 @@ void GrGLGpu::onResetContext(uint32_t resetBits) {
}
if (kGLES_GrGLStandard == this->glStandard() &&
- this->hasExtension("GL_ARM_shader_framebuffer_fetch")) {
+ this->glCaps().fbFetchRequiresEnablePerSample()) {
// The arm extension requires specifically enabling MSAA fetching per sample.
// On some devices this may have a perf hit. Also multiple render targets are disabled
- GL_CALL(Enable(GR_GL_FETCH_PER_SAMPLE_ARM));
+ GL_CALL(Enable(GR_GL_FETCH_PER_SAMPLE));
}
fHWWriteToColor = kUnknown_TriState;
// we only ever use lines in hairline mode