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

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

Issue 1109863004: Use GLSLCaps for creating processor keys and GLSL-specific programs (Closed) Base URL: https://chromium.googlesource.com/skia@master
Patch Set: Created 5 years, 8 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/effects/GrYUVtoRGBEffect.cpp ('k') | src/gpu/gl/GrGLPathProcessor.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGLCaps.h
diff --git a/src/gpu/gl/GrGLCaps.h b/src/gpu/gl/GrGLCaps.h
index 71bbafd8d9b046d4c673c5769e4180cda90deb3c..f08aa452669d5b372eece188cfab9636c23a89d4 100644
--- a/src/gpu/gl/GrGLCaps.h
+++ b/src/gpu/gl/GrGLCaps.h
@@ -1,398 +1,400 @@
-/*
- * Copyright 2012 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-
-#ifndef GrGLCaps_DEFINED
-#define GrGLCaps_DEFINED
-
-#include "GrDrawTargetCaps.h"
-#include "GrGLStencilAttachment.h"
-#include "SkChecksum.h"
-#include "SkTHash.h"
-#include "SkTArray.h"
-
-class GrGLContextInfo;
-
-/**
- * Stores some capabilities of a GL context. Most are determined by the GL
- * version and the extensions string. It also tracks formats that have passed
- * the FBO completeness test.
- */
-class GrGLCaps : public GrDrawTargetCaps {
-public:
- SK_DECLARE_INST_COUNT(GrGLCaps)
-
- typedef GrGLStencilAttachment::Format StencilFormat;
-
- /**
- * The type of MSAA for FBOs supported. Different extensions have different
- * semantics of how / when a resolve is performed.
- */
- enum MSFBOType {
- /**
- * no support for MSAA FBOs
- */
- kNone_MSFBOType = 0,
- /**
- * GL3.0-style MSAA FBO (GL_ARB_framebuffer_object).
- */
- kDesktop_ARB_MSFBOType,
- /**
- * earlier GL_EXT_framebuffer* extensions
- */
- kDesktop_EXT_MSFBOType,
- /**
- * Similar to kDesktop_ARB but with additional restrictions on glBlitFramebuffer.
- */
- kES_3_0_MSFBOType,
- /**
- * GL_APPLE_framebuffer_multisample ES extension
- */
- kES_Apple_MSFBOType,
- /**
- * GL_IMG_multisampled_render_to_texture. This variation does not have MSAA renderbuffers.
- * Instead the texture is multisampled when bound to the FBO and then resolved automatically
- * when read. It also defines an alternate value for GL_MAX_SAMPLES (which we call
- * GR_GL_MAX_SAMPLES_IMG).
- */
- kES_IMG_MsToTexture_MSFBOType,
- /**
- * GL_EXT_multisampled_render_to_texture. Same as the IMG one above but uses the standard
- * GL_MAX_SAMPLES value.
- */
- kES_EXT_MsToTexture_MSFBOType,
-
- kLast_MSFBOType = kES_EXT_MsToTexture_MSFBOType
- };
-
- enum InvalidateFBType {
- kNone_InvalidateFBType,
- kDiscard_InvalidateFBType, //<! glDiscardFramebuffer()
- kInvalidate_InvalidateFBType, //<! glInvalidateFramebuffer()
-
- kLast_InvalidateFBType = kInvalidate_InvalidateFBType
- };
-
- enum MapBufferType {
- kNone_MapBufferType,
- kMapBuffer_MapBufferType, // glMapBuffer()
- kMapBufferRange_MapBufferType, // glMapBufferRange()
- kChromium_MapBufferType, // GL_CHROMIUM_map_sub
-
- kLast_MapBufferType = kChromium_MapBufferType,
- };
-
- /**
- * Creates a GrGLCaps that advertises no support for any extensions,
- * formats, etc. Call init to initialize from a GrGLContextInfo.
- */
- GrGLCaps();
-
- GrGLCaps(const GrGLCaps& caps);
-
- GrGLCaps& operator = (const GrGLCaps& caps);
-
- /**
- * Resets the caps such that nothing is supported.
- */
- void reset() override;
-
- /**
- * Initializes the GrGLCaps to the set of features supported in the current
- * OpenGL context accessible via ctxInfo.
- */
- bool init(const GrGLContextInfo& ctxInfo, const GrGLInterface* glInterface);
-
- /**
- * Call to note that a color config has been verified as a valid color
- * attachment. This may save future calls to glCheckFramebufferStatus
- * using isConfigVerifiedColorAttachment().
- */
- void markConfigAsValidColorAttachment(GrPixelConfig config) {
- fVerifiedColorConfigs.markVerified(config);
- }
-
- /**
- * Call to check whether a config has been verified as a valid color
- * attachment.
- */
- bool isConfigVerifiedColorAttachment(GrPixelConfig config) const {
- return fVerifiedColorConfigs.isVerified(config);
- }
-
- /**
- * Call to note that a color config / stencil format pair passed
- * FBO status check. We may skip calling glCheckFramebufferStatus for
- * this combination in the future using
- * isColorConfigAndStencilFormatVerified().
- */
- void markColorConfigAndStencilFormatAsVerified(
- GrPixelConfig config,
- const GrGLStencilAttachment::Format& format);
-
- /**
- * Call to check whether color config / stencil format pair has already
- * passed FBO status check.
- */
- bool isColorConfigAndStencilFormatVerified(
- GrPixelConfig config,
- const GrGLStencilAttachment::Format& format) const;
-
- /**
- * Reports the type of MSAA FBO support.
- */
- MSFBOType msFBOType() const { return fMSFBOType; }
-
- /**
- * Does the supported MSAA FBO extension have MSAA renderbuffers?
- */
- bool usesMSAARenderBuffers() const {
- return kNone_MSFBOType != fMSFBOType &&
- kES_IMG_MsToTexture_MSFBOType != fMSFBOType &&
- kES_EXT_MsToTexture_MSFBOType != fMSFBOType;
- }
-
- /**
- * Is the MSAA FBO extension one where the texture is multisampled when bound to an FBO and
- * then implicitly resolved when read.
- */
- bool usesImplicitMSAAResolve() const {
- return kES_IMG_MsToTexture_MSFBOType == fMSFBOType ||
- kES_EXT_MsToTexture_MSFBOType == fMSFBOType;
- }
-
- /**
- * Some helper functions for encapsulating various extensions to read FB Buffer on openglES
- *
- * TODO(joshualitt) On desktop opengl 4.2+ we can achieve something similar to this effect
- */
- bool fbFetchSupport() const { return fFBFetchSupport; }
-
- bool fbFetchNeedsCustomOutput() const { return fFBFetchNeedsCustomOutput; }
-
- const char* fbFetchColorName() const { return fFBFetchColorName; }
-
- const char* fbFetchExtensionString() const { return fFBFetchExtensionString; }
-
- bool fbMixedSamplesSupport() const { return fFBMixedSamplesSupport; }
-
- InvalidateFBType invalidateFBType() const { return fInvalidateFBType; }
-
- /// What type of buffer mapping is supported?
- MapBufferType mapBufferType() const { return fMapBufferType; }
-
- /**
- * Gets an array of legal stencil formats. These formats are not guaranteed
- * to be supported by the driver but are legal GLenum names given the GL
- * version and extensions supported.
- */
- const SkTArray<StencilFormat, true>& stencilFormats() const {
- return fStencilFormats;
- }
-
- /// The maximum number of fragment uniform vectors (GLES has min. 16).
- int maxFragmentUniformVectors() const { return fMaxFragmentUniformVectors; }
-
- /// maximum number of attribute values per vertex
- int maxVertexAttributes() const { return fMaxVertexAttributes; }
-
- /// maximum number of texture units accessible in the fragment shader.
- int maxFragmentTextureUnits() const { return fMaxFragmentTextureUnits; }
-
- /// ES requires an extension to support RGBA8 in RenderBufferStorage
- bool rgba8RenderbufferSupport() const { return fRGBA8RenderbufferSupport; }
-
- /**
- * Depending on the ES extensions present the BGRA external format may
- * correspond either a BGRA or RGBA internalFormat. On desktop GL it is
- * RGBA.
- */
- bool bgraIsInternalFormat() const { return fBGRAIsInternalFormat; }
-
- /// GL_ARB_texture_swizzle support
- bool textureSwizzleSupport() const { return fTextureSwizzleSupport; }
-
- /// Is there support for GL_UNPACK_ROW_LENGTH
- bool unpackRowLengthSupport() const { return fUnpackRowLengthSupport; }
-
- /// Is there support for GL_UNPACK_FLIP_Y
- bool unpackFlipYSupport() const { return fUnpackFlipYSupport; }
-
- /// Is there support for GL_PACK_ROW_LENGTH
- bool packRowLengthSupport() const { return fPackRowLengthSupport; }
-
- /// Is there support for GL_PACK_REVERSE_ROW_ORDER
- bool packFlipYSupport() const { return fPackFlipYSupport; }
-
- /// Is there support for texture parameter GL_TEXTURE_USAGE
- bool textureUsageSupport() const { return fTextureUsageSupport; }
-
- /// Is there support for glTexStorage
- bool texStorageSupport() const { return fTexStorageSupport; }
-
- /// Is there support for GL_RED and GL_R8
- bool textureRedSupport() const { return fTextureRedSupport; }
-
- /// Is GL_ARB_IMAGING supported
- bool imagingSupport() const { return fImagingSupport; }
-
- /// Is GL_ARB_fragment_coord_conventions supported?
- bool fragCoordConventionsSupport() const { return fFragCoordsConventionSupport; }
-
- /// Is there support for Vertex Array Objects?
- bool vertexArrayObjectSupport() const { return fVertexArrayObjectSupport; }
-
- /// Is there support for ES2 compatability?
- bool ES2CompatibilitySupport() const { return fES2CompatibilitySupport; }
-
- /// Use indices or vertices in CPU arrays rather than VBOs for dynamic content.
- bool useNonVBOVertexAndIndexDynamicData() const {
- return fUseNonVBOVertexAndIndexDynamicData;
- }
-
- /// Does ReadPixels support the provided format/type combo?
- bool readPixelsSupported(const GrGLInterface* intf,
- GrGLenum format,
- GrGLenum type,
- GrGLenum currFboFormat) const;
-
- bool isCoreProfile() const { return fIsCoreProfile; }
-
-
- bool fullClearIsFree() const { return fFullClearIsFree; }
-
- bool dropsTileOnZeroDivide() const { return fDropsTileOnZeroDivide; }
-
- /**
- * Returns a string containing the caps info.
- */
- SkString dump() const override;
-
- /**
- * LATC can appear under one of three possible names. In order to know
- * which GL internal format to use, we need to keep track of which name
- * we found LATC under. The default is LATC.
- */
- enum LATCAlias {
- kLATC_LATCAlias,
- kRGTC_LATCAlias,
- k3DC_LATCAlias
- };
-
- LATCAlias latcAlias() const { return fLATCAlias; }
-
-private:
- /**
- * Maintains a bit per GrPixelConfig. It is used to avoid redundantly
- * performing glCheckFrameBufferStatus for the same config.
- */
- struct VerifiedColorConfigs {
- VerifiedColorConfigs() {
- this->reset();
- }
-
- void reset() {
- for (int i = 0; i < kNumUints; ++i) {
- fVerifiedColorConfigs[i] = 0;
- }
- }
-
- static const int kNumUints = (kGrPixelConfigCnt + 31) / 32;
- uint32_t fVerifiedColorConfigs[kNumUints];
-
- void markVerified(GrPixelConfig config) {
-#if !GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT
- return;
-#endif
- int u32Idx = config / 32;
- int bitIdx = config % 32;
- fVerifiedColorConfigs[u32Idx] |= 1 << bitIdx;
- }
-
- bool isVerified(GrPixelConfig config) const {
-#if !GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT
- return false;
-#endif
- int u32Idx = config / 32;
- int bitIdx = config % 32;
- return SkToBool(fVerifiedColorConfigs[u32Idx] & (1 << bitIdx));
- }
- };
-
- void initFSAASupport(const GrGLContextInfo&, const GrGLInterface*);
- void initStencilFormats(const GrGLContextInfo&);
- // This must be called after initFSAASupport().
- void initConfigRenderableTable(const GrGLContextInfo&);
- void initConfigTexturableTable(const GrGLContextInfo&, const GrGLInterface*);
-
- // Must be called after fGeometryShaderSupport is initialized.
- void initShaderPrecisionTable(const GrGLContextInfo&, const GrGLInterface*);
-
- bool doReadPixelsSupported(const GrGLInterface* intf, GrGLenum format, GrGLenum type) const;
-
- // tracks configs that have been verified to pass the FBO completeness when
- // used as a color attachment
- VerifiedColorConfigs fVerifiedColorConfigs;
-
- SkTArray<StencilFormat, true> fStencilFormats;
- // tracks configs that have been verified to pass the FBO completeness when
- // used as a color attachment when a particular stencil format is used
- // as a stencil attachment.
- SkTArray<VerifiedColorConfigs, true> fStencilVerifiedColorConfigs;
-
- int fMaxFragmentUniformVectors;
- int fMaxVertexAttributes;
- int fMaxFragmentTextureUnits;
-
- MSFBOType fMSFBOType;
- InvalidateFBType fInvalidateFBType;
- MapBufferType fMapBufferType;
- LATCAlias fLATCAlias;
-
- bool fRGBA8RenderbufferSupport : 1;
- bool fBGRAIsInternalFormat : 1;
- bool fTextureSwizzleSupport : 1;
- bool fUnpackRowLengthSupport : 1;
- bool fUnpackFlipYSupport : 1;
- bool fPackRowLengthSupport : 1;
- bool fPackFlipYSupport : 1;
- bool fTextureUsageSupport : 1;
- bool fTexStorageSupport : 1;
- bool fTextureRedSupport : 1;
- bool fImagingSupport : 1;
- bool fTwoFormatLimit : 1;
- bool fFragCoordsConventionSupport : 1;
- bool fVertexArrayObjectSupport : 1;
- bool fES2CompatibilitySupport : 1;
- bool fUseNonVBOVertexAndIndexDynamicData : 1;
- bool fIsCoreProfile : 1;
- bool fFullClearIsFree : 1;
- bool fDropsTileOnZeroDivide : 1;
- bool fFBFetchSupport : 1;
- bool fFBFetchNeedsCustomOutput : 1;
- bool fFBMixedSamplesSupport : 1;
-
- const char* fFBFetchColorName;
- const char* fFBFetchExtensionString;
-
- struct ReadPixelsSupportedFormat {
- GrGLenum fFormat;
- GrGLenum fType;
- GrGLenum fFboFormat;
-
- bool operator==(const ReadPixelsSupportedFormat& rhs) const {
- return fFormat == rhs.fFormat
- && fType == rhs.fType
- && fFboFormat == rhs.fFboFormat;
- }
- };
- mutable SkTHashMap<ReadPixelsSupportedFormat, bool> fReadPixelsSupportedCache;
-
- typedef GrDrawTargetCaps INHERITED;
-};
-
-#endif
+/*
+ * Copyright 2012 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+
+#ifndef GrGLCaps_DEFINED
+#define GrGLCaps_DEFINED
+
+#include "GrDrawTargetCaps.h"
+#include "GrGLStencilAttachment.h"
+#include "SkChecksum.h"
+#include "SkTHash.h"
+#include "SkTArray.h"
+
+class GrGLContextInfo;
+
+/**
+ * Stores some capabilities of a GL context. Most are determined by the GL
+ * version and the extensions string. It also tracks formats that have passed
+ * the FBO completeness test.
+ */
+class GrGLCaps : public GrDrawTargetCaps {
+public:
+ SK_DECLARE_INST_COUNT(GrGLCaps)
+
+ typedef GrGLStencilAttachment::Format StencilFormat;
+
+ /**
+ * The type of MSAA for FBOs supported. Different extensions have different
+ * semantics of how / when a resolve is performed.
+ */
+ enum MSFBOType {
+ /**
+ * no support for MSAA FBOs
+ */
+ kNone_MSFBOType = 0,
+ /**
+ * GL3.0-style MSAA FBO (GL_ARB_framebuffer_object).
+ */
+ kDesktop_ARB_MSFBOType,
+ /**
+ * earlier GL_EXT_framebuffer* extensions
+ */
+ kDesktop_EXT_MSFBOType,
+ /**
+ * Similar to kDesktop_ARB but with additional restrictions on glBlitFramebuffer.
+ */
+ kES_3_0_MSFBOType,
+ /**
+ * GL_APPLE_framebuffer_multisample ES extension
+ */
+ kES_Apple_MSFBOType,
+ /**
+ * GL_IMG_multisampled_render_to_texture. This variation does not have MSAA renderbuffers.
+ * Instead the texture is multisampled when bound to the FBO and then resolved automatically
+ * when read. It also defines an alternate value for GL_MAX_SAMPLES (which we call
+ * GR_GL_MAX_SAMPLES_IMG).
+ */
+ kES_IMG_MsToTexture_MSFBOType,
+ /**
+ * GL_EXT_multisampled_render_to_texture. Same as the IMG one above but uses the standard
+ * GL_MAX_SAMPLES value.
+ */
+ kES_EXT_MsToTexture_MSFBOType,
+
+ kLast_MSFBOType = kES_EXT_MsToTexture_MSFBOType
+ };
+
+ enum InvalidateFBType {
+ kNone_InvalidateFBType,
+ kDiscard_InvalidateFBType, //<! glDiscardFramebuffer()
+ kInvalidate_InvalidateFBType, //<! glInvalidateFramebuffer()
+
+ kLast_InvalidateFBType = kInvalidate_InvalidateFBType
+ };
+
+ enum MapBufferType {
+ kNone_MapBufferType,
+ kMapBuffer_MapBufferType, // glMapBuffer()
+ kMapBufferRange_MapBufferType, // glMapBufferRange()
+ kChromium_MapBufferType, // GL_CHROMIUM_map_sub
+
+ kLast_MapBufferType = kChromium_MapBufferType,
+ };
+
+ /**
+ * Creates a GrGLCaps that advertises no support for any extensions,
+ * formats, etc. Call init to initialize from a GrGLContextInfo.
+ */
+ GrGLCaps();
+
+ GrGLCaps(const GrGLCaps& caps);
+
+ GrGLCaps& operator = (const GrGLCaps& caps);
+
+ /**
+ * Resets the caps such that nothing is supported.
+ */
+ void reset() override;
+
+ /**
+ * Initializes the GrGLCaps to the set of features supported in the current
+ * OpenGL context accessible via ctxInfo.
+ */
+ bool init(const GrGLContextInfo& ctxInfo, const GrGLInterface* glInterface);
+
+ /**
+ * Call to note that a color config has been verified as a valid color
+ * attachment. This may save future calls to glCheckFramebufferStatus
+ * using isConfigVerifiedColorAttachment().
+ */
+ void markConfigAsValidColorAttachment(GrPixelConfig config) {
+ fVerifiedColorConfigs.markVerified(config);
+ }
+
+ /**
+ * Call to check whether a config has been verified as a valid color
+ * attachment.
+ */
+ bool isConfigVerifiedColorAttachment(GrPixelConfig config) const {
+ return fVerifiedColorConfigs.isVerified(config);
+ }
+
+ /**
+ * Call to note that a color config / stencil format pair passed
+ * FBO status check. We may skip calling glCheckFramebufferStatus for
+ * this combination in the future using
+ * isColorConfigAndStencilFormatVerified().
+ */
+ void markColorConfigAndStencilFormatAsVerified(
+ GrPixelConfig config,
+ const GrGLStencilAttachment::Format& format);
+
+ /**
+ * Call to check whether color config / stencil format pair has already
+ * passed FBO status check.
+ */
+ bool isColorConfigAndStencilFormatVerified(
+ GrPixelConfig config,
+ const GrGLStencilAttachment::Format& format) const;
+
+ /**
+ * Reports the type of MSAA FBO support.
+ */
+ MSFBOType msFBOType() const { return fMSFBOType; }
+
+ /**
+ * Does the supported MSAA FBO extension have MSAA renderbuffers?
+ */
+ bool usesMSAARenderBuffers() const {
+ return kNone_MSFBOType != fMSFBOType &&
+ kES_IMG_MsToTexture_MSFBOType != fMSFBOType &&
+ kES_EXT_MsToTexture_MSFBOType != fMSFBOType;
+ }
+
+ /**
+ * Is the MSAA FBO extension one where the texture is multisampled when bound to an FBO and
+ * then implicitly resolved when read.
+ */
+ bool usesImplicitMSAAResolve() const {
+ return kES_IMG_MsToTexture_MSFBOType == fMSFBOType ||
+ kES_EXT_MsToTexture_MSFBOType == fMSFBOType;
+ }
+
+ /**
+ * Some helper functions for encapsulating various extensions to read FB Buffer on openglES
+ *
+ * TODO(joshualitt) On desktop opengl 4.2+ we can achieve something similar to this effect
+ */
+ bool fbFetchSupport() const { return fFBFetchSupport; }
+
+ bool fbFetchNeedsCustomOutput() const { return fFBFetchNeedsCustomOutput; }
+
+ const char* fbFetchColorName() const { return fFBFetchColorName; }
+
+ const char* fbFetchExtensionString() const { return fFBFetchExtensionString; }
+
+ bool fbMixedSamplesSupport() const { return fFBMixedSamplesSupport; }
+
+ InvalidateFBType invalidateFBType() const { return fInvalidateFBType; }
+
+ /// What type of buffer mapping is supported?
+ MapBufferType mapBufferType() const { return fMapBufferType; }
+
+ /**
+ * Gets an array of legal stencil formats. These formats are not guaranteed
+ * to be supported by the driver but are legal GLenum names given the GL
+ * version and extensions supported.
+ */
+ const SkTArray<StencilFormat, true>& stencilFormats() const {
+ return fStencilFormats;
+ }
+
+ /// The maximum number of fragment uniform vectors (GLES has min. 16).
+ int maxFragmentUniformVectors() const { return fMaxFragmentUniformVectors; }
+
+ /// maximum number of attribute values per vertex
+ int maxVertexAttributes() const { return fMaxVertexAttributes; }
+
+ /// maximum number of texture units accessible in the fragment shader.
+ int maxFragmentTextureUnits() const { return fMaxFragmentTextureUnits; }
+
+ /// ES requires an extension to support RGBA8 in RenderBufferStorage
+ bool rgba8RenderbufferSupport() const { return fRGBA8RenderbufferSupport; }
+
+ /**
+ * Depending on the ES extensions present the BGRA external format may
+ * correspond either a BGRA or RGBA internalFormat. On desktop GL it is
+ * RGBA.
+ */
+ bool bgraIsInternalFormat() const { return fBGRAIsInternalFormat; }
+
+ /// GL_ARB_texture_swizzle support
+ bool textureSwizzleSupport() const { return fTextureSwizzleSupport; }
+
+ /// Is there support for GL_UNPACK_ROW_LENGTH
+ bool unpackRowLengthSupport() const { return fUnpackRowLengthSupport; }
+
+ /// Is there support for GL_UNPACK_FLIP_Y
+ bool unpackFlipYSupport() const { return fUnpackFlipYSupport; }
+
+ /// Is there support for GL_PACK_ROW_LENGTH
+ bool packRowLengthSupport() const { return fPackRowLengthSupport; }
+
+ /// Is there support for GL_PACK_REVERSE_ROW_ORDER
+ bool packFlipYSupport() const { return fPackFlipYSupport; }
+
+ /// Is there support for texture parameter GL_TEXTURE_USAGE
+ bool textureUsageSupport() const { return fTextureUsageSupport; }
+
+ /// Is there support for glTexStorage
+ bool texStorageSupport() const { return fTexStorageSupport; }
+
+ /// Is there support for GL_RED and GL_R8
+ bool textureRedSupport() const { return fTextureRedSupport; }
+
+ /// Is GL_ARB_IMAGING supported
+ bool imagingSupport() const { return fImagingSupport; }
+
+ /// Is GL_ARB_fragment_coord_conventions supported?
+ bool fragCoordConventionsSupport() const { return fFragCoordsConventionSupport; }
+
+ /// Is there support for Vertex Array Objects?
+ bool vertexArrayObjectSupport() const { return fVertexArrayObjectSupport; }
+
+ /// Is there support for ES2 compatability?
+ bool ES2CompatibilitySupport() const { return fES2CompatibilitySupport; }
+
+ /// Use indices or vertices in CPU arrays rather than VBOs for dynamic content.
+ bool useNonVBOVertexAndIndexDynamicData() const {
+ return fUseNonVBOVertexAndIndexDynamicData;
+ }
+
+ /// Does ReadPixels support the provided format/type combo?
+ bool readPixelsSupported(const GrGLInterface* intf,
+ GrGLenum format,
+ GrGLenum type,
+ GrGLenum currFboFormat) const;
+
+ bool isCoreProfile() const { return fIsCoreProfile; }
+
+
+ bool fullClearIsFree() const { return fFullClearIsFree; }
+
+ bool dropsTileOnZeroDivide() const { return fDropsTileOnZeroDivide; }
+
+ /**
+ * Returns a string containing the caps info.
+ */
+ SkString dump() const override;
+
+ /**
+ * LATC can appear under one of three possible names. In order to know
+ * which GL internal format to use, we need to keep track of which name
+ * we found LATC under. The default is LATC.
+ */
+ enum LATCAlias {
+ kLATC_LATCAlias,
+ kRGTC_LATCAlias,
+ k3DC_LATCAlias
+ };
+
+ LATCAlias latcAlias() const { return fLATCAlias; }
+
+private:
+ /**
+ * Maintains a bit per GrPixelConfig. It is used to avoid redundantly
+ * performing glCheckFrameBufferStatus for the same config.
+ */
+ struct VerifiedColorConfigs {
+ VerifiedColorConfigs() {
+ this->reset();
+ }
+
+ void reset() {
+ for (int i = 0; i < kNumUints; ++i) {
+ fVerifiedColorConfigs[i] = 0;
+ }
+ }
+
+ static const int kNumUints = (kGrPixelConfigCnt + 31) / 32;
+ uint32_t fVerifiedColorConfigs[kNumUints];
+
+ void markVerified(GrPixelConfig config) {
+#if !GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT
+ return;
+#endif
+ int u32Idx = config / 32;
+ int bitIdx = config % 32;
+ fVerifiedColorConfigs[u32Idx] |= 1 << bitIdx;
+ }
+
+ bool isVerified(GrPixelConfig config) const {
+#if !GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT
+ return false;
+#endif
+ int u32Idx = config / 32;
+ int bitIdx = config % 32;
+ return SkToBool(fVerifiedColorConfigs[u32Idx] & (1 << bitIdx));
+ }
+ };
+
+ void initFSAASupport(const GrGLContextInfo&, const GrGLInterface*);
+ void initStencilFormats(const GrGLContextInfo&);
+ // This must be called after initFSAASupport().
+ void initConfigRenderableTable(const GrGLContextInfo&);
+ void initConfigTexturableTable(const GrGLContextInfo&, const GrGLInterface*);
+
+ // Must be called after fGeometryShaderSupport is initialized.
+ void initShaderPrecisionTable(const GrGLContextInfo&, const GrGLInterface*);
+
+ bool doReadPixelsSupported(const GrGLInterface* intf, GrGLenum format, GrGLenum type) const;
+
+ // tracks configs that have been verified to pass the FBO completeness when
+ // used as a color attachment
+ VerifiedColorConfigs fVerifiedColorConfigs;
+
+ SkTArray<StencilFormat, true> fStencilFormats;
+ // tracks configs that have been verified to pass the FBO completeness when
+ // used as a color attachment when a particular stencil format is used
+ // as a stencil attachment.
+ SkTArray<VerifiedColorConfigs, true> fStencilVerifiedColorConfigs;
+
+ int fMaxFragmentUniformVectors;
+ int fMaxVertexAttributes;
+ int fMaxFragmentTextureUnits;
+
+ MSFBOType fMSFBOType;
+ InvalidateFBType fInvalidateFBType;
+ MapBufferType fMapBufferType;
+ LATCAlias fLATCAlias;
+
+ bool fRGBA8RenderbufferSupport : 1;
+ bool fBGRAIsInternalFormat : 1;
+ bool fTextureSwizzleSupport : 1;
+ bool fUnpackRowLengthSupport : 1;
+ bool fUnpackFlipYSupport : 1;
+ bool fPackRowLengthSupport : 1;
+ bool fPackFlipYSupport : 1;
+ bool fTextureUsageSupport : 1;
+ bool fTexStorageSupport : 1;
+ bool fTextureRedSupport : 1;
+ bool fImagingSupport : 1;
+ bool fTwoFormatLimit : 1;
+ bool fFragCoordsConventionSupport : 1;
+ bool fVertexArrayObjectSupport : 1;
+ bool fES2CompatibilitySupport : 1;
+ bool fUseNonVBOVertexAndIndexDynamicData : 1;
+ bool fIsCoreProfile : 1;
+ bool fFullClearIsFree : 1;
+ bool fDropsTileOnZeroDivide : 1;
+ bool fFBFetchSupport : 1;
+ bool fFBFetchNeedsCustomOutput : 1;
+ bool fFBMixedSamplesSupport : 1;
+
+ const char* fFBFetchColorName;
+ const char* fFBFetchExtensionString;
+
+ struct ReadPixelsSupportedFormat {
+ GrGLenum fFormat;
+ GrGLenum fType;
+ GrGLenum fFboFormat;
+
+ bool operator==(const ReadPixelsSupportedFormat& rhs) const {
+ return fFormat == rhs.fFormat
+ && fType == rhs.fType
+ && fFboFormat == rhs.fFboFormat;
+ }
+ };
+ mutable SkTHashMap<ReadPixelsSupportedFormat, bool> fReadPixelsSupportedCache;
+
+ typedef GrDrawTargetCaps INHERITED;
+};
+
+typedef GrGLCaps GrGLSLCaps;
+
+#endif
« no previous file with comments | « src/gpu/effects/GrYUVtoRGBEffect.cpp ('k') | src/gpu/gl/GrGLPathProcessor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698