X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fcontext.c;h=34da16b88f4f8439e716d2ce18d5b45181988a74;hb=7fe5a8e874b2cae2b1ada3f6aab8ca6766753b1e;hp=0ef8fe32a635e90d6adaa3366312d7e854311472;hpb=49ed075615ec869715b0a520eea66d3620fc1c3b;p=mesa.git diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index 0ef8fe32a63..34da16b88f4 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -129,6 +129,7 @@ #include "util/disk_cache.h" #include "util/strtod.h" #include "stencil.h" +#include "shaderimage.h" #include "texcompress_s3tc.h" #include "texstate.h" #include "transformfeedback.h" @@ -404,11 +405,7 @@ one_time_init( struct gl_context *ctx ) #if defined(DEBUG) if (MESA_VERBOSE != 0) { - _mesa_debug(ctx, "Mesa " PACKAGE_VERSION " DEBUG build" -#ifdef MESA_GIT_SHA1 - " (" MESA_GIT_SHA1 ")" -#endif - "\n"); + _mesa_debug(ctx, "Mesa " PACKAGE_VERSION " DEBUG build" MESA_GIT_SHA1 "\n"); } #endif } @@ -558,7 +555,7 @@ _mesa_init_constants(struct gl_constants *consts, gl_api api) /* Constants, may be overriden (usually only reduced) by device drivers */ consts->MaxTextureMbytes = MAX_TEXTURE_MBYTES; - consts->MaxTextureLevels = MAX_TEXTURE_LEVELS; + consts->MaxTextureSize = 1 << (MAX_TEXTURE_LEVELS - 1); consts->Max3DTextureLevels = MAX_3D_TEXTURE_LEVELS; consts->MaxCubeTextureLevels = MAX_CUBE_TEXTURE_LEVELS; consts->MaxTextureRectSize = MAX_TEXTURE_RECT_SIZE; @@ -637,6 +634,7 @@ _mesa_init_constants(struct gl_constants *consts, gl_api api) consts->Program[MESA_SHADER_GEOMETRY].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS; consts->MaxGeometryOutputVertices = MAX_GEOMETRY_OUTPUT_VERTICES; consts->MaxGeometryTotalOutputComponents = MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS; + consts->MaxGeometryShaderInvocations = MAX_GEOMETRY_SHADER_INVOCATIONS; #ifdef DEBUG consts->GenerateTemporaryNames = true; @@ -784,7 +782,7 @@ check_context_limits(struct gl_context *ctx) /* Texture size checks */ - assert(ctx->Const.MaxTextureLevels <= MAX_TEXTURE_LEVELS); + assert(ctx->Const.MaxTextureSize <= (1 << (MAX_TEXTURE_LEVELS - 1))); assert(ctx->Const.Max3DTextureLevels <= MAX_3D_TEXTURE_LEVELS); assert(ctx->Const.MaxCubeTextureLevels <= MAX_CUBE_TEXTURE_LEVELS); assert(ctx->Const.MaxTextureRectSize <= MAX_TEXTURE_RECT_SIZE); @@ -794,10 +792,8 @@ check_context_limits(struct gl_context *ctx) assert(MAX_TEXTURE_LEVELS >= MAX_CUBE_TEXTURE_LEVELS); /* Max texture size should be <= max viewport size (render to texture) */ - assert((1U << (ctx->Const.MaxTextureLevels - 1)) - <= ctx->Const.MaxViewportWidth); - assert((1U << (ctx->Const.MaxTextureLevels - 1)) - <= ctx->Const.MaxViewportHeight); + assert(ctx->Const.MaxTextureSize <= ctx->Const.MaxViewportWidth); + assert(ctx->Const.MaxTextureSize <= ctx->Const.MaxViewportHeight); assert(ctx->Const.MaxDrawBuffers <= MAX_DRAW_BUFFERS); @@ -1198,6 +1194,8 @@ _mesa_initialize_context(struct gl_context *ctx, /* misc one-time initializations */ one_time_init(ctx); + _mesa_init_shader_compiler_types(); + /* Plug in driver functions and context pointer here. * This is important because when we call alloc_shared_state() below * we'll call ctx->Driver.NewTextureObject() to create the default @@ -1310,7 +1308,7 @@ fail: * \sa _mesa_initialize_context() and init_attrib_groups(). */ void -_mesa_free_context_data( struct gl_context *ctx ) +_mesa_free_context_data(struct gl_context *ctx, bool destroy_compiler_types) { if (!_mesa_get_current_context()){ /* No current context, but we may need one in order to delete @@ -1348,6 +1346,7 @@ _mesa_free_context_data( struct gl_context *ctx ) _mesa_free_buffer_objects(ctx); _mesa_free_eval_data( ctx ); _mesa_free_texture_data( ctx ); + _mesa_free_image_textures(ctx); _mesa_free_matrix_data( ctx ); _mesa_free_pipeline_data(ctx); _mesa_free_program_data(ctx); @@ -1384,6 +1383,9 @@ _mesa_free_context_data( struct gl_context *ctx ) free(ctx->VersionString); + if (destroy_compiler_types) + _mesa_destroy_shader_compiler_types(); + /* unbind the context if it's currently bound */ if (ctx == _mesa_get_current_context()) { _mesa_make_current(NULL, NULL, NULL); @@ -1402,7 +1404,7 @@ void _mesa_destroy_context( struct gl_context *ctx ) { if (ctx) { - _mesa_free_context_data(ctx); + _mesa_free_context_data(ctx, true); free( (void *) ctx ); } } @@ -1701,7 +1703,10 @@ _mesa_make_current( struct gl_context *newCtx, _mesa_flush(curCtx); } - /* We used to call _glapi_check_multithread() here. Now do it in drivers */ + /* Call this periodically to detect when the user has begun using + * GL rendering from multiple threads. + */ + _glapi_check_multithread(); if (!newCtx) { _glapi_set_dispatch(NULL); /* none current */