namespace egl
{
class Display;
-class Surface;
class Config;
}
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,
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[] =
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();
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);
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();
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();
Query *createQuery(GLuint handle, GLenum type);
const EGLint clientVersion;
+ const egl::Config *const config;
State mState;