X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fcontext.h;h=e00149aabeff222071ac643005639dbde30f1610;hb=7f0b6a5df8e360e52a97f59948dda927fe9df15e;hp=d902ea76e17effc0b39367012772846787dce848;hpb=ee9a2b1ae97beb20eec2d4fef1307ab57cad9d3a;p=mesa.git diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h index d902ea76e17..e00149aabef 100644 --- a/src/mesa/main/context.h +++ b/src/mesa/main/context.h @@ -49,8 +49,11 @@ #define CONTEXT_H -#include "imports.h" +#include "errors.h" + +#include "extensions.h" #include "mtypes.h" +#include "vbo/vbo.h" #ifdef __cplusplus @@ -63,7 +66,7 @@ struct _glapi_table; /** \name Visual-related functions */ /*@{*/ - + extern struct gl_config * _mesa_create_visual( GLboolean dbFlag, GLboolean stereoFlag, @@ -77,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, @@ -93,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 ); @@ -104,6 +107,9 @@ _mesa_destroy_visual( struct gl_config *vis ); /** \name Context-related functions */ /*@{*/ +extern void +_mesa_initialize(void); + extern GLboolean _mesa_initialize_context( struct gl_context *ctx, gl_api api, @@ -111,14 +117,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, bool destroy_debug_output); extern void _mesa_destroy_context( struct gl_context *ctx ); @@ -127,10 +127,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 ); @@ -146,9 +142,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); @@ -156,28 +149,17 @@ _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); -extern int -_mesa_generic_nop(void); - extern void GLAPIENTRY _mesa_Finish( void ); @@ -228,9 +210,9 @@ _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) \ - ctx->Driver.FlushVertices(ctx, FLUSH_STORED_VERTICES); \ + vbo_exec_FlushVertices(ctx, FLUSH_STORED_VERTICES); \ ctx->NewState |= newstate; \ } while (0) @@ -247,16 +229,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) \ - ctx->Driver.FlushVertices(ctx, 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. */ @@ -271,7 +275,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) \ @@ -288,7 +292,7 @@ do { \ /** * Checks if the context is for Desktop GL (Compatibility or Core) */ -static inline GLboolean +static inline bool _mesa_is_desktop_gl(const struct gl_context *ctx) { return ctx->API == API_OPENGL_COMPAT || ctx->API == API_OPENGL_CORE; @@ -298,7 +302,7 @@ _mesa_is_desktop_gl(const struct gl_context *ctx) /** * Checks if the context is for any GLES version */ -static inline GLboolean +static inline bool _mesa_is_gles(const struct gl_context *ctx) { return ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2; @@ -306,26 +310,148 @@ _mesa_is_gles(const struct gl_context *ctx) /** - * Checks if the context is for GLES 3.x + * Checks if the context is for GLES 3.0 or later */ -static inline GLboolean +static inline bool _mesa_is_gles3(const struct gl_context *ctx) { return ctx->API == API_OPENGLES2 && ctx->Version >= 30; } +/** + * Checks if the context is for GLES 3.1 or later + */ +static inline bool +_mesa_is_gles31(const struct gl_context *ctx) +{ + return ctx->API == API_OPENGLES2 && ctx->Version >= 31; +} + + +/** + * 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 GLboolean +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); } +/** + * Checks if the context supports compute shaders. + */ +static inline bool +_mesa_has_compute_shaders(const struct gl_context *ctx) +{ + return _mesa_has_ARB_compute_shader(ctx) || + (ctx->API == API_OPENGLES2 && ctx->Version >= 31); +} + +/** + * Checks if the context supports tessellation. + */ +static inline bool +_mesa_has_tessellation(const struct gl_context *ctx) +{ + /* _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); +} + +static inline bool +_mesa_has_texture_cube_map_array(const struct gl_context *ctx) +{ + 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 } #endif