X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fcontext.h;h=e00149aabeff222071ac643005639dbde30f1610;hb=7f0b6a5df8e360e52a97f59948dda927fe9df15e;hp=133b17f59b259593a4db746f7fc1987179fcec60;hpb=db8790c0dadffb6c88a0939bd34eca2b8e75d2e0;p=mesa.git diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h index 133b17f59b2..e00149aabef 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 ); @@ -106,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, @@ -114,7 +118,7 @@ _mesa_initialize_context( struct gl_context *ctx, 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 ); @@ -123,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 ); @@ -152,21 +152,11 @@ _mesa_get_dispatch(struct gl_context *ctx); extern void _mesa_set_context_lost_dispatch(struct gl_context *ctx); -extern GLboolean -_mesa_valid_to_render(struct gl_context *ctx, const char *where); - /** \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); @@ -220,7 +210,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; \ @@ -239,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) \ 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. */ @@ -263,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) \ @@ -317,6 +329,81 @@ _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. */ @@ -339,25 +426,31 @@ _mesa_has_compute_shaders(const struct gl_context *ctx) } /** - * 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 }