X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fcontext.h;h=f2feb7f9ed4f53c74e8420242dd4a60c051e53b9;hb=ee0263e03fbc897767bf8b787dc0cc917481e826;hp=4798b1f9b43607a01ec0cd8004c16425a92f6ea1;hpb=ab129a44ae3a7515eb4642c068299673c890fb73;p=mesa.git diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h index 4798b1f9b43..f2feb7f9ed4 100644 --- a/src/mesa/main/context.h +++ b/src/mesa/main/context.h @@ -49,7 +49,8 @@ #define CONTEXT_H -#include "imports.h" +#include "errors.h" + #include "extensions.h" #include "mtypes.h" #include "vbo/vbo.h" @@ -65,7 +66,7 @@ struct _glapi_table; /** \name Visual-related functions */ /*@{*/ - + extern struct gl_config * _mesa_create_visual( GLboolean dbFlag, GLboolean stereoFlag, @@ -79,7 +80,7 @@ _mesa_create_visual( GLboolean dbFlag, GLint accumGreenBits, GLint accumBlueBits, GLint accumAlphaBits, - GLint numSamples ); + GLuint numSamples ); extern GLboolean _mesa_initialize_visual( struct gl_config *v, @@ -95,7 +96,7 @@ _mesa_initialize_visual( struct gl_config *v, GLint accumGreenBits, GLint accumBlueBits, GLint accumAlphaBits, - GLint numSamples ); + GLuint numSamples ); extern void _mesa_destroy_visual( struct gl_config *vis ); @@ -113,14 +114,8 @@ _mesa_initialize_context( struct gl_context *ctx, struct gl_context *share_list, const struct dd_function_table *driverFunctions); -extern struct gl_context * -_mesa_create_context(gl_api api, - const struct gl_config *visual, - struct gl_context *share_list, - const struct dd_function_table *driverFunctions); - extern void -_mesa_free_context_data( struct gl_context *ctx ); +_mesa_free_context_data(struct gl_context *ctx); extern void _mesa_destroy_context( struct gl_context *ctx ); @@ -129,10 +124,6 @@ _mesa_destroy_context( struct gl_context *ctx ); extern void _mesa_copy_context(const struct gl_context *src, struct gl_context *dst, GLuint mask); - -extern void -_mesa_check_init_viewport(struct gl_context *ctx, GLuint width, GLuint height); - extern GLboolean _mesa_make_current( struct gl_context *ctx, struct gl_framebuffer *drawBuffer, struct gl_framebuffer *readBuffer ); @@ -148,9 +139,6 @@ _mesa_get_current_context(void); extern void _mesa_init_constants(struct gl_constants *consts, gl_api api); -extern void -_mesa_init_get_hash(struct gl_context *ctx); - extern void _mesa_notifySwapBuffers(struct gl_context *gc); @@ -158,22 +146,14 @@ _mesa_notifySwapBuffers(struct gl_context *gc); extern struct _glapi_table * _mesa_get_dispatch(struct gl_context *ctx); - -extern GLboolean -_mesa_valid_to_render(struct gl_context *ctx, const char *where); +extern void +_mesa_set_context_lost_dispatch(struct gl_context *ctx); /** \name Miscellaneous */ /*@{*/ -extern void -_mesa_record_error( struct gl_context *ctx, GLenum error ); - - -extern void -_mesa_finish(struct gl_context *ctx); - extern void _mesa_flush(struct gl_context *ctx); @@ -227,7 +207,7 @@ _mesa_inside_dlist_begin_end(const struct gl_context *ctx) #define FLUSH_VERTICES(ctx, newstate) \ do { \ if (MESA_VERBOSE & VERBOSE_STATE) \ - _mesa_debug(ctx, "FLUSH_VERTICES in %s\n", MESA_FUNCTION);\ + _mesa_debug(ctx, "FLUSH_VERTICES in %s\n", __func__); \ if (ctx->Driver.NeedFlush & FLUSH_STORED_VERTICES) \ vbo_exec_FlushVertices(ctx, FLUSH_STORED_VERTICES); \ ctx->NewState |= newstate; \ @@ -246,16 +226,38 @@ do { \ #define FLUSH_CURRENT(ctx, newstate) \ do { \ if (MESA_VERBOSE & VERBOSE_STATE) \ - _mesa_debug(ctx, "FLUSH_CURRENT in %s\n", MESA_FUNCTION); \ + _mesa_debug(ctx, "FLUSH_CURRENT in %s\n", __func__); \ if (ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) \ vbo_exec_FlushVertices(ctx, FLUSH_UPDATE_CURRENT); \ ctx->NewState |= newstate; \ } while (0) +/** + * Flush vertices. + * + * \param ctx GL context. + * + * Checks if dd_function_table::NeedFlush is marked to flush stored vertices + * or current state and calls dd_function_table::FlushVertices if so. + */ +#define FLUSH_FOR_DRAW(ctx) \ +do { \ + if (MESA_VERBOSE & VERBOSE_STATE) \ + _mesa_debug(ctx, "FLUSH_FOR_DRAW in %s\n", __func__); \ + if (ctx->Driver.NeedFlush) { \ + if (ctx->_AllowDrawOutOfOrder) { \ + if (ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) \ + vbo_exec_FlushVertices(ctx, FLUSH_UPDATE_CURRENT); \ + } else { \ + vbo_exec_FlushVertices(ctx, ctx->Driver.NeedFlush); \ + } \ + } \ +} while (0) + /** * Macro to assert that the API call was made outside the * glBegin()/glEnd() pair, with return value. - * + * * \param ctx GL context. * \param retval value to return in case the assertion fails. */ @@ -270,7 +272,7 @@ do { \ /** * Macro to assert that the API call was made outside the * glBegin()/glEnd() pair. - * + * * \param ctx GL context. */ #define ASSERT_OUTSIDE_BEGIN_END(ctx) \ @@ -324,14 +326,89 @@ _mesa_is_gles31(const struct gl_context *ctx) } +/** + * Checks if the context is for GLES 3.2 or later + */ +static inline bool +_mesa_is_gles32(const struct gl_context *ctx) +{ + return ctx->API == API_OPENGLES2 && ctx->Version >= 32; +} + + +static inline bool +_mesa_is_no_error_enabled(const struct gl_context *ctx) +{ + return ctx->Const.ContextFlags & GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR; +} + + +static inline bool +_mesa_has_integer_textures(const struct gl_context *ctx) +{ + return _mesa_has_EXT_texture_integer(ctx) || _mesa_is_gles3(ctx); +} + +static inline bool +_mesa_has_half_float_textures(const struct gl_context *ctx) +{ + return _mesa_has_ARB_texture_float(ctx) || + _mesa_has_OES_texture_half_float(ctx) || _mesa_is_gles3(ctx); +} + +static inline bool +_mesa_has_float_textures(const struct gl_context *ctx) +{ + return _mesa_has_ARB_texture_float(ctx) || + _mesa_has_OES_texture_float(ctx) || _mesa_is_gles3(ctx); + } + +static inline bool +_mesa_has_texture_rgb10_a2ui(const struct gl_context *ctx) +{ + return _mesa_has_ARB_texture_rgb10_a2ui(ctx) || _mesa_is_gles3(ctx); +} + +static inline bool +_mesa_has_float_depth_buffer(const struct gl_context *ctx) +{ + return _mesa_has_ARB_depth_buffer_float(ctx) || _mesa_is_gles3(ctx); +} + +static inline bool +_mesa_has_packed_float(const struct gl_context *ctx) +{ + return _mesa_has_EXT_packed_float(ctx) || _mesa_is_gles3(ctx); +} + +static inline bool +_mesa_has_rg_textures(const struct gl_context *ctx) +{ + return _mesa_has_ARB_texture_rg(ctx) || _mesa_has_EXT_texture_rg(ctx) || + _mesa_is_gles3(ctx); +} + +static inline bool +_mesa_has_texture_shared_exponent(const struct gl_context *ctx) +{ + return _mesa_has_EXT_texture_shared_exponent(ctx) || _mesa_is_gles3(ctx); +} + +static inline bool +_mesa_has_texture_type_2_10_10_10_REV(const struct gl_context *ctx) +{ + return _mesa_is_desktop_gl(ctx) || + _mesa_has_EXT_texture_type_2_10_10_10_REV(ctx); +} + /** * Checks if the context supports geometry shaders. */ static inline bool _mesa_has_geometry_shaders(const struct gl_context *ctx) { - return _mesa_is_desktop_gl(ctx) && - (ctx->Version >= 32 || ctx->Extensions.ARB_geometry_shader4); + return _mesa_has_OES_geometry_shader(ctx) || + (_mesa_is_desktop_gl(ctx) && ctx->Version >= 32); } @@ -341,30 +418,36 @@ _mesa_has_geometry_shaders(const struct gl_context *ctx) static inline bool _mesa_has_compute_shaders(const struct gl_context *ctx) { - return (ctx->API == API_OPENGL_CORE && ctx->Extensions.ARB_compute_shader) || + return _mesa_has_ARB_compute_shader(ctx) || (ctx->API == API_OPENGLES2 && ctx->Version >= 31); } /** - * Checks if the context supports shader subroutines. + * Checks if the context supports tessellation. */ static inline bool -_mesa_has_shader_subroutine(const struct gl_context *ctx) +_mesa_has_tessellation(const struct gl_context *ctx) { - return ctx->API == API_OPENGL_CORE && - (ctx->Version >= 40 || ctx->Extensions.ARB_shader_subroutine); + /* _mesa_has_EXT_tessellation_shader(ctx) is redundant with the OES + * check, so don't bother calling it. + */ + return _mesa_has_OES_tessellation_shader(ctx) || + _mesa_has_ARB_tessellation_shader(ctx); } -/** - * Checks if the context supports tessellation. - */ -static inline GLboolean -_mesa_has_tessellation(const struct gl_context *ctx) +static inline bool +_mesa_has_texture_cube_map_array(const struct gl_context *ctx) { - return ctx->API == API_OPENGL_CORE && - ctx->Extensions.ARB_tessellation_shader; + return _mesa_has_ARB_texture_cube_map_array(ctx) || + _mesa_has_OES_texture_cube_map_array(ctx); } +static inline bool +_mesa_has_texture_view(const struct gl_context *ctx) +{ + return _mesa_has_ARB_texture_view(ctx) || + _mesa_has_OES_texture_view(ctx); +} #ifdef __cplusplus }