diff options
author | Brian Salomon <bsalomon@google.com> | 2019-01-28 09:05:22 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2019-01-28 14:39:43 +0000 |
commit | 8bc352c30542e1e01d84e652fee89a01d3248df8 (patch) | |
tree | 71e3e81cb129ce2413802a591e2f9c1c85b86d64 /src | |
parent | fd0bba81c0b2b38b8462f8ad91ec1a22b606d490 (diff) | |
download | skqp-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.cpp | 16 | ||||
-rw-r--r-- | src/gpu/gl/GrGLCaps.h | 3 | ||||
-rw-r--r-- | src/gpu/gl/GrGLDefines.h | 2 | ||||
-rw-r--r-- | src/gpu/gl/GrGLGpu.cpp | 4 |
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 |