OSDN Git Service

Make Blitter part of Renderer.
[android-x86/external-swiftshader.git] / src / OpenGL / libGLESv2 / Context.h
index e3865e7..bbe6ddd 100644 (file)
@@ -37,7 +37,6 @@
 namespace egl
 {
 class Display;
-class Surface;
 class Config;
 }
 
@@ -77,7 +76,7 @@ enum
        MAX_VERTEX_ATTRIBS = sw::MAX_VERTEX_INPUTS,
        MAX_UNIFORM_VECTORS = 256,   // Device limit
        MAX_VERTEX_UNIFORM_VECTORS = sw::VERTEX_UNIFORM_VECTORS - 3,   // Reserve space for gl_DepthRange
-       MAX_VARYING_VECTORS = 10,
+       MAX_VARYING_VECTORS = MIN(sw::MAX_FRAGMENT_INPUTS, sw::MAX_VERTEX_OUTPUTS),
        MAX_TEXTURE_IMAGE_UNITS = sw::TEXTURE_IMAGE_UNITS,
        MAX_VERTEX_TEXTURE_IMAGE_UNITS = sw::VERTEX_TEXTURE_IMAGE_UNITS,
        MAX_COMBINED_TEXTURE_IMAGE_UNITS = MAX_TEXTURE_IMAGE_UNITS + MAX_VERTEX_TEXTURE_IMAGE_UNITS,
@@ -103,6 +102,7 @@ enum
        MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 4,
        MAX_UNIFORM_BUFFER_BINDINGS = sw::MAX_UNIFORM_BUFFER_BINDINGS,
        UNIFORM_BUFFER_OFFSET_ALIGNMENT = 1,
+       NUM_PROGRAM_BINARY_FORMATS = 0,
 };
 
 const GLenum compressedTextureFormats[] =
@@ -425,13 +425,14 @@ struct State
        GLint packSkipImages;
 };
 
-class Context : public egl::Context
+class [[clang::lto_visibility_public]] Context : public egl::Context
 {
 public:
-       Context(egl::Display *display, const Context *shareContext, EGLint clientVersion);
+       Context(egl::Display *display, const Context *shareContext, EGLint clientVersion, const egl::Config *config);
 
-       virtual void makeCurrent(egl::Surface *surface);
-       virtual EGLint getClientVersion() const;
+       void makeCurrent(gl::Surface *surface) override;
+       EGLint getClientVersion() const override;
+       EGLint getConfigID() const override;
 
        void markAllStateDirty();
 
@@ -663,6 +664,9 @@ public:
 
        bool hasZeroDivisor() const;
 
+       void drawArrays(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount = 1);
+       void drawElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount = 1);
+       void blit(sw::Surface *source, const sw::SliceRect &sRect, sw::Surface *dest, const sw::SliceRect &dRect) override;
        void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei *bufSize, void* pixels);
        void clear(GLbitfield mask);
        void clearColorBuffer(GLint drawbuffer, const GLint *value);
@@ -670,9 +674,7 @@ public:
        void clearColorBuffer(GLint drawbuffer, const GLfloat *value);
        void clearDepthBuffer(const GLfloat value);
        void clearStencilBuffer(const GLint value);
-       void drawArrays(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount = 1);
-       void drawElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount = 1);
-       void finish();
+       void finish() override;
        void flush();
 
        void recordInvalidEnum();
@@ -689,17 +691,17 @@ public:
                             GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
                             GLbitfield mask, bool filter, bool allowPartialDepthStencilBlit);
 
-       virtual void bindTexImage(egl::Surface *surface);
-       virtual EGLenum validateSharedImage(EGLenum target, GLuint name, GLuint textureLevel);
-       virtual egl::Image *createSharedImage(EGLenum target, GLuint name, GLuint textureLevel);
+       void bindTexImage(gl::Surface *surface) override;
+       EGLenum validateSharedImage(EGLenum target, GLuint name, GLuint textureLevel) override;
+       egl::Image *createSharedImage(EGLenum target, GLuint name, GLuint textureLevel) override;
        egl::Image *getSharedImage(GLeglImageOES image);
 
        Device *getDevice();
 
-       const GLubyte* getExtensions(GLuint index, GLuint* numExt = nullptr) const;
+       const GLubyte *getExtensions(GLuint index, GLuint *numExt = nullptr) const;
 
 private:
-       virtual ~Context();
+       ~Context() override;
 
        void applyScissor(int width, int height);
        bool applyRenderTarget();
@@ -724,6 +726,7 @@ private:
        Query *createQuery(GLuint handle, GLenum type);
 
        const EGLint clientVersion;
+       const egl::Config *const config;
 
        State mState;