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

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

Issue 824753002: Rename GrGpuGL -> GrGLGpu (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Address nit Created 6 years 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/GrGLVertexBuffer.cpp ('k') | src/gpu/gl/GrGpuGL.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGpuGL.h
diff --git a/src/gpu/gl/GrGpuGL.h b/src/gpu/gl/GrGpuGL.h
deleted file mode 100644
index d2a0d9a9ea7ac88b8d48cbd7c98e094940732d16..0000000000000000000000000000000000000000
--- a/src/gpu/gl/GrGpuGL.h
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef GrGpuGL_DEFINED
-#define GrGpuGL_DEFINED
-
-#include "GrDrawState.h"
-#include "GrGLContext.h"
-#include "GrGLIRect.h"
-#include "GrGLIndexBuffer.h"
-#include "GrGLPathRendering.h"
-#include "GrGLProgram.h"
-#include "GrGLRenderTarget.h"
-#include "GrGLStencilBuffer.h"
-#include "GrGLTexture.h"
-#include "GrGLVertexArray.h"
-#include "GrGLVertexBuffer.h"
-#include "GrGpu.h"
-#include "GrOptDrawState.h"
-#include "GrXferProcessor.h"
-#include "SkTypes.h"
-
-#ifdef SK_DEVELOPER
-#define PROGRAM_CACHE_STATS
-#endif
-
-class GrGLGpu : public GrGpu {
-public:
- GrGLGpu(const GrGLContext& ctx, GrContext* context);
- ~GrGLGpu() SK_OVERRIDE;
-
- void contextAbandoned() SK_OVERRIDE;
-
- const GrGLContext& glContext() const { return fGLContext; }
-
- const GrGLInterface* glInterface() const { return fGLContext.interface(); }
- const GrGLContextInfo& ctxInfo() const { return fGLContext; }
- GrGLStandard glStandard() const { return fGLContext.standard(); }
- GrGLVersion glVersion() const { return fGLContext.version(); }
- GrGLSLGeneration glslGeneration() const { return fGLContext.glslGeneration(); }
- const GrGLCaps& glCaps() const { return *fGLContext.caps(); }
-
- GrGLPathRendering* glPathRendering() {
- SkASSERT(glCaps().pathRenderingSupport());
- return static_cast<GrGLPathRendering*>(pathRendering());
- }
-
- void discard(GrRenderTarget*) SK_OVERRIDE;
-
- // Used by GrGLProgram and GrGLPathTexGenProgramEffects to configure OpenGL
- // state.
- void bindTexture(int unitIdx, const GrTextureParams& params, GrGLTexture* texture);
-
- // GrGpu overrides
- GrPixelConfig preferredReadPixelsConfig(GrPixelConfig readConfig,
- GrPixelConfig surfaceConfig) const SK_OVERRIDE;
- GrPixelConfig preferredWritePixelsConfig(GrPixelConfig writeConfig,
- GrPixelConfig surfaceConfig) const SK_OVERRIDE;
- bool canWriteTexturePixels(const GrTexture*, GrPixelConfig srcConfig) const SK_OVERRIDE;
- bool readPixelsWillPayForYFlip(GrRenderTarget* renderTarget,
- int left, int top,
- int width, int height,
- GrPixelConfig config,
- size_t rowBytes) const SK_OVERRIDE;
- bool fullReadPixelsIsFasterThanPartial() const SK_OVERRIDE;
-
- bool initCopySurfaceDstDesc(const GrSurface* src, GrSurfaceDesc* desc) SK_OVERRIDE;
-
- // These functions should be used to bind GL objects. They track the GL state and skip redundant
- // bindings. Making the equivalent glBind calls directly will confuse the state tracking.
- void bindVertexArray(GrGLuint id) {
- fHWGeometryState.setVertexArrayID(this, id);
- }
- void bindIndexBufferAndDefaultVertexArray(GrGLuint id) {
- fHWGeometryState.setIndexBufferIDOnDefaultVertexArray(this, id);
- }
- void bindVertexBuffer(GrGLuint id) {
- fHWGeometryState.setVertexBufferID(this, id);
- }
-
- // These callbacks update state tracking when GL objects are deleted. They are called from
- // GrGLResource onRelease functions.
- void notifyVertexArrayDelete(GrGLuint id) {
- fHWGeometryState.notifyVertexArrayDelete(id);
- }
- void notifyVertexBufferDelete(GrGLuint id) {
- fHWGeometryState.notifyVertexBufferDelete(id);
- }
- void notifyIndexBufferDelete(GrGLuint id) {
- fHWGeometryState.notifyIndexBufferDelete(id);
- }
-
- bool copySurface(GrSurface* dst,
- GrSurface* src,
- const SkIRect& srcRect,
- const SkIPoint& dstPoint) SK_OVERRIDE;
-
- bool canCopySurface(const GrSurface* dst,
- const GrSurface* src,
- const SkIRect& srcRect,
- const SkIPoint& dstPoint) SK_OVERRIDE;
-
-protected:
- void buildProgramDesc(const GrOptDrawState&,
- const GrProgramDesc::DescInfo&,
- GrGpu::DrawType,
- GrProgramDesc*) SK_OVERRIDE;
-
-private:
- // GrGpu overrides
- void onResetContext(uint32_t resetBits) SK_OVERRIDE;
-
- GrTexture* onCreateTexture(const GrSurfaceDesc& desc,
- const void* srcData,
- size_t rowBytes) SK_OVERRIDE;
- GrTexture* onCreateCompressedTexture(const GrSurfaceDesc& desc,
- const void* srcData) SK_OVERRIDE;
- GrVertexBuffer* onCreateVertexBuffer(size_t size, bool dynamic) SK_OVERRIDE;
- GrIndexBuffer* onCreateIndexBuffer(size_t size, bool dynamic) SK_OVERRIDE;
- GrTexture* onWrapBackendTexture(const GrBackendTextureDesc&) SK_OVERRIDE;
- GrRenderTarget* onWrapBackendRenderTarget(const GrBackendRenderTargetDesc&) SK_OVERRIDE;
- bool createStencilBufferForRenderTarget(GrRenderTarget* rt,
- int width, int height) SK_OVERRIDE;
- bool attachStencilBufferToRenderTarget(GrStencilBuffer* sb, GrRenderTarget* rt) SK_OVERRIDE;
-
- void onClear(GrRenderTarget*, const SkIRect* rect, GrColor color,
- bool canIgnoreRect) SK_OVERRIDE;
-
- void onClearStencilClip(GrRenderTarget*, const SkIRect& rect, bool insideClip) SK_OVERRIDE;
-
- bool onReadPixels(GrRenderTarget* target,
- int left, int top,
- int width, int height,
- GrPixelConfig,
- void* buffer,
- size_t rowBytes) SK_OVERRIDE;
-
- bool onWriteTexturePixels(GrTexture* texture,
- int left, int top, int width, int height,
- GrPixelConfig config, const void* buffer,
- size_t rowBytes) SK_OVERRIDE;
-
- void onResolveRenderTarget(GrRenderTarget* target) SK_OVERRIDE;
-
- void onDraw(const GrOptDrawState&, const GrDrawTarget::DrawInfo&) SK_OVERRIDE;
- void onStencilPath(const GrPath*, const StencilPathState&) SK_OVERRIDE;
- void onDrawPath(const GrOptDrawState&, const GrPath*, const GrStencilSettings&) SK_OVERRIDE;
- void onDrawPaths(const GrOptDrawState&,
- const GrPathRange*,
- const void* indices,
- GrDrawTarget::PathIndexType,
- const float transformValues[],
- GrDrawTarget::PathTransformType,
- int count,
- const GrStencilSettings&) SK_OVERRIDE;
-
- void clearStencil(GrRenderTarget*) SK_OVERRIDE;
-
- // GrDrawTarget overrides
- void didAddGpuTraceMarker() SK_OVERRIDE;
- void didRemoveGpuTraceMarker() SK_OVERRIDE;
-
- // binds texture unit in GL
- void setTextureUnit(int unitIdx);
-
- // Flushes state from GrOptDrawState to GL. Returns false if the state couldn't be set.
- bool flushGLState(const GrOptDrawState&);
-
- // Sets up vertex attribute pointers and strides. On return indexOffsetInBytes gives the offset
- // an into the index buffer. It does not account for drawInfo.startIndex() but rather the start
- // index is relative to the returned offset.
- void setupGeometry(const GrOptDrawState&,
- const GrDrawTarget::DrawInfo& info,
- size_t* indexOffsetInBytes);
-
- // Subclasses should call this to flush the blend state.
- void flushBlend(const GrXferProcessor::BlendInfo& blendInfo);
-
- bool hasExtension(const char* ext) const { return fGLContext.hasExtension(ext); }
-
- static bool BlendCoeffReferencesConstant(GrBlendCoeff coeff);
-
- class ProgramCache : public ::SkNoncopyable {
- public:
- ProgramCache(GrGLGpu* gpu);
- ~ProgramCache();
-
- void abandon();
- GrGLProgram* getProgram(const GrOptDrawState&);
-
- private:
- enum {
- // We may actually have kMaxEntries+1 shaders in the GL context because we create a new
- // shader before evicting from the cache.
- kMaxEntries = 128,
- kHashBits = 6,
- };
-
- struct Entry;
-
- struct ProgDescLess;
-
- // binary search for entry matching desc. returns index into fEntries that matches desc or ~
- // of the index of where it should be inserted.
- int search(const GrProgramDesc& desc) const;
-
- // sorted array of all the entries
- Entry* fEntries[kMaxEntries];
- // hash table based on lowest kHashBits bits of the program key. Used to avoid binary
- // searching fEntries.
- Entry* fHashTable[1 << kHashBits];
-
- int fCount;
- unsigned int fCurrLRUStamp;
- GrGLGpu* fGpu;
-#ifdef PROGRAM_CACHE_STATS
- int fTotalRequests;
- int fCacheMisses;
- int fHashMisses; // cache hit but hash table missed
-#endif
- };
-
- void flushDither(bool dither);
- void flushColorWrite(bool writeColor);
- void flushDrawFace(GrDrawState::DrawFace face);
-
- // flushes the scissor. see the note on flushBoundTextureAndParams about
- // flushing the scissor after that function is called.
- void flushScissor(const GrScissorState&,
- const GrGLIRect& rtViewport,
- GrSurfaceOrigin rtOrigin);
-
- // disables the scissor
- void disableScissor();
-
- void initFSAASupport();
-
- // determines valid stencil formats
- void initStencilFormats();
-
- // sets a texture unit to use for texture operations other than binding a texture to a program.
- // ensures that such operations don't negatively interact with tracking bound textures.
- void setScratchTextureUnit();
-
- // bounds is region that may be modified and therefore has to be resolved.
- // NULL means whole target. Can be an empty rect.
- void flushRenderTarget(GrGLRenderTarget*, const SkIRect* bounds);
-
- void flushStencil(const GrStencilSettings&);
- void flushHWAAState(GrRenderTarget* rt, bool useHWAA, bool isLineDraw);
-
- bool configToGLFormats(GrPixelConfig config,
- bool getSizedInternal,
- GrGLenum* internalFormat,
- GrGLenum* externalFormat,
- GrGLenum* externalType);
- // helper for onCreateTexture and writeTexturePixels
- bool uploadTexData(const GrSurfaceDesc& desc,
- bool isNewTexture,
- int left, int top, int width, int height,
- GrPixelConfig dataConfig,
- const void* data,
- size_t rowBytes);
-
- // helper for onCreateCompressedTexture. If width and height are
- // set to -1, then this function will use desc.fWidth and desc.fHeight
- // for the size of the data. The isNewTexture flag should be set to true
- // whenever a new texture needs to be created. Otherwise, we assume that
- // the texture is already in GPU memory and that it's going to be updated
- // with new data.
- bool uploadCompressedTexData(const GrSurfaceDesc& desc,
- const void* data,
- bool isNewTexture = true,
- int left = 0, int top = 0,
- int width = -1, int height = -1);
-
- bool createRenderTargetObjects(const GrSurfaceDesc&, GrGLuint texID, GrGLRenderTarget::IDDesc*);
-
- GrGLuint bindSurfaceAsFBO(GrSurface* surface, GrGLenum fboTarget, GrGLIRect* viewport);
-
- GrGLContext fGLContext;
-
- // GL program-related state
- ProgramCache* fProgramCache;
- SkAutoTUnref<GrGLProgram> fCurrentProgram;
-
- ///////////////////////////////////////////////////////////////////////////
- ///@name Caching of GL State
- ///@{
- int fHWActiveTextureUnitIdx;
- GrGLuint fHWProgramID;
-
- enum TriState {
- kNo_TriState,
- kYes_TriState,
- kUnknown_TriState
- };
-
- // last scissor / viewport scissor state seen by the GL.
- struct {
- TriState fEnabled;
- GrGLIRect fRect;
- void invalidate() {
- fEnabled = kUnknown_TriState;
- fRect.invalidate();
- }
- } fHWScissorSettings;
-
- GrGLIRect fHWViewport;
-
- /**
- * Tracks bound vertex and index buffers and vertex attrib array state.
- */
- class HWGeometryState {
- public:
- HWGeometryState() { fVBOVertexArray = NULL; this->invalidate(); }
-
- ~HWGeometryState() { SkSafeUnref(fVBOVertexArray); }
-
- void invalidate() {
- fBoundVertexArrayIDIsValid = false;
- fBoundVertexBufferIDIsValid = false;
- fDefaultVertexArrayBoundIndexBufferID = false;
- fDefaultVertexArrayBoundIndexBufferIDIsValid = false;
- fDefaultVertexArrayAttribState.invalidate();
- if (fVBOVertexArray) {
- fVBOVertexArray->invalidateCachedState();
- }
- }
-
- void notifyVertexArrayDelete(GrGLuint id) {
- if (fBoundVertexArrayIDIsValid && fBoundVertexArrayID == id) {
- // Does implicit bind to 0
- fBoundVertexArrayID = 0;
- }
- }
-
- void setVertexArrayID(GrGLGpu* gpu, GrGLuint arrayID) {
- if (!gpu->glCaps().vertexArrayObjectSupport()) {
- SkASSERT(0 == arrayID);
- return;
- }
- if (!fBoundVertexArrayIDIsValid || arrayID != fBoundVertexArrayID) {
- GR_GL_CALL(gpu->glInterface(), BindVertexArray(arrayID));
- fBoundVertexArrayIDIsValid = true;
- fBoundVertexArrayID = arrayID;
- }
- }
-
- void notifyVertexBufferDelete(GrGLuint id) {
- if (fBoundVertexBufferIDIsValid && id == fBoundVertexBufferID) {
- fBoundVertexBufferID = 0;
- }
- if (fVBOVertexArray) {
- fVBOVertexArray->notifyVertexBufferDelete(id);
- }
- fDefaultVertexArrayAttribState.notifyVertexBufferDelete(id);
- }
-
- void notifyIndexBufferDelete(GrGLuint id) {
- if (fDefaultVertexArrayBoundIndexBufferIDIsValid &&
- id == fDefaultVertexArrayBoundIndexBufferID) {
- fDefaultVertexArrayBoundIndexBufferID = 0;
- }
- if (fVBOVertexArray) {
- fVBOVertexArray->notifyIndexBufferDelete(id);
- }
- }
-
- void setVertexBufferID(GrGLGpu* gpu, GrGLuint id) {
- if (!fBoundVertexBufferIDIsValid || id != fBoundVertexBufferID) {
- GR_GL_CALL(gpu->glInterface(), BindBuffer(GR_GL_ARRAY_BUFFER, id));
- fBoundVertexBufferIDIsValid = true;
- fBoundVertexBufferID = id;
- }
- }
-
- /**
- * Binds the default vertex array and binds the index buffer. This is used when binding
- * an index buffer in order to update it.
- */
- void setIndexBufferIDOnDefaultVertexArray(GrGLGpu* gpu, GrGLuint id) {
- this->setVertexArrayID(gpu, 0);
- if (!fDefaultVertexArrayBoundIndexBufferIDIsValid ||
- id != fDefaultVertexArrayBoundIndexBufferID) {
- GR_GL_CALL(gpu->glInterface(), BindBuffer(GR_GL_ELEMENT_ARRAY_BUFFER, id));
- fDefaultVertexArrayBoundIndexBufferIDIsValid = true;
- fDefaultVertexArrayBoundIndexBufferID = id;
- }
- }
-
- /**
- * Binds the vertex array object that should be used to render from the vertex buffer.
- * The vertex array is bound and its attrib array state object is returned. The vertex
- * buffer is bound. The index buffer (if non-NULL) is bound to the vertex array. The
- * returned GrGLAttribArrayState should be used to set vertex attribute arrays.
- */
- GrGLAttribArrayState* bindArrayAndBuffersToDraw(GrGLGpu* gpu,
- const GrGLVertexBuffer* vbuffer,
- const GrGLIndexBuffer* ibuffer);
-
- private:
- GrGLuint fBoundVertexArrayID;
- GrGLuint fBoundVertexBufferID;
- bool fBoundVertexArrayIDIsValid;
- bool fBoundVertexBufferIDIsValid;
-
- GrGLuint fDefaultVertexArrayBoundIndexBufferID;
- bool fDefaultVertexArrayBoundIndexBufferIDIsValid;
- // We return a non-const pointer to this from bindArrayAndBuffersToDraw when vertex array 0
- // is bound. However, this class is internal to GrGpuGL and this object never leaks out of
- // GrGpuGL.
- GrGLAttribArrayState fDefaultVertexArrayAttribState;
-
- // This is used when we're using a core profile and the vertices are in a VBO.
- GrGLVertexArray* fVBOVertexArray;
- } fHWGeometryState;
-
- struct {
- GrBlendCoeff fSrcCoeff;
- GrBlendCoeff fDstCoeff;
- GrColor fConstColor;
- bool fConstColorValid;
- TriState fEnabled;
-
- void invalidate() {
- fSrcCoeff = kInvalid_GrBlendCoeff;
- fDstCoeff = kInvalid_GrBlendCoeff;
- fConstColorValid = false;
- fEnabled = kUnknown_TriState;
- }
- } fHWBlendState;
-
- TriState fMSAAEnabled;
-
- GrStencilSettings fHWStencilSettings;
- TriState fHWStencilTestEnabled;
-
-
- GrDrawState::DrawFace fHWDrawFace;
- TriState fHWWriteToColor;
- TriState fHWDitherEnabled;
- uint32_t fHWBoundRenderTargetUniqueID;
- SkTArray<uint32_t, true> fHWBoundTextureUniqueIDs;
-
- ///@}
-
- // we record what stencil format worked last time to hopefully exit early
- // from our loop that tries stencil formats and calls check fb status.
- int fLastSuccessfulStencilFmtIdx;
-
- typedef GrGpu INHERITED;
- friend class GrGLPathRendering; // For accessing setTextureUnit.
-};
-
-#endif
« no previous file with comments | « src/gpu/gl/GrGLVertexBuffer.cpp ('k') | src/gpu/gl/GrGpuGL.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698