Lines Matching +full:shared +full:- +full:glapi
2 * Mesa 3-D graphics library
4 * Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
54 * If you're viewing this information as Doxygen-generated HTML you'll
122 #include "shared.h"
165 /* ubyte -> float conversion */
180 * Calls all the various one-time-fini functions in Mesa
190 * Calls all the various one-time-init functions in Mesa
240 * Calls all the various one-time-init functions in Mesa.
243 * and sets the glapi callbacks if the \c MESA_DEBUG environment variable is
256 * Initialize fields of gl_current_attrib (aka ctx->Current.*)
264 for (i = 0; i < ARRAY_SIZE(ctx->Current.Attrib); i++) { in _mesa_init_current()
265 ASSIGN_4V( ctx->Current.Attrib[i], 0.0, 0.0, 0.0, 1.0 ); in _mesa_init_current()
269 ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_NORMAL], 0.0, 0.0, 1.0, 1.0 ); in _mesa_init_current()
270 ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_COLOR0], 1.0, 1.0, 1.0, 1.0 ); in _mesa_init_current()
271 ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_COLOR1], 0.0, 0.0, 0.0, 1.0 ); in _mesa_init_current()
272 ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX], 1.0, 0.0, 0.0, 1.0 ); in _mesa_init_current()
273 ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_EDGEFLAG], 1.0, 0.0, 0.0, 1.0 ); in _mesa_init_current()
285 prog->MaxInstructions = MAX_PROGRAM_INSTRUCTIONS; in init_program_limits()
286 prog->MaxAluInstructions = MAX_PROGRAM_INSTRUCTIONS; in init_program_limits()
287 prog->MaxTexInstructions = MAX_PROGRAM_INSTRUCTIONS; in init_program_limits()
288 prog->MaxTexIndirections = MAX_PROGRAM_INSTRUCTIONS; in init_program_limits()
289 prog->MaxTemps = MAX_PROGRAM_TEMPS; in init_program_limits()
290 prog->MaxEnvParams = MAX_PROGRAM_ENV_PARAMS; in init_program_limits()
291 prog->MaxLocalParams = MAX_PROGRAM_LOCAL_PARAMS; in init_program_limits()
292 prog->MaxAddressOffset = MAX_PROGRAM_LOCAL_PARAMS; in init_program_limits()
296 prog->MaxParameters = MAX_VERTEX_PROGRAM_PARAMS; in init_program_limits()
297 prog->MaxAttribs = MAX_VERTEX_GENERIC_ATTRIBS; in init_program_limits()
298 prog->MaxAddressRegs = MAX_VERTEX_PROGRAM_ADDRESS_REGS; in init_program_limits()
299 prog->MaxUniformComponents = 4 * MAX_UNIFORMS; in init_program_limits()
300 prog->MaxInputComponents = 0; /* value not used */ in init_program_limits()
301 prog->MaxOutputComponents = 16 * 4; /* old limit not to break tnl and swrast */ in init_program_limits()
304 prog->MaxParameters = MAX_FRAGMENT_PROGRAM_PARAMS; in init_program_limits()
305 prog->MaxAttribs = MAX_FRAGMENT_PROGRAM_INPUTS; in init_program_limits()
306 prog->MaxAddressRegs = MAX_FRAGMENT_PROGRAM_ADDRESS_REGS; in init_program_limits()
307 prog->MaxUniformComponents = 4 * MAX_UNIFORMS; in init_program_limits()
308 prog->MaxInputComponents = 16 * 4; /* old limit not to break tnl and swrast */ in init_program_limits()
309 prog->MaxOutputComponents = 0; /* value not used */ in init_program_limits()
314 prog->MaxParameters = MAX_VERTEX_PROGRAM_PARAMS; in init_program_limits()
315 prog->MaxAttribs = MAX_VERTEX_GENERIC_ATTRIBS; in init_program_limits()
316 prog->MaxAddressRegs = MAX_VERTEX_PROGRAM_ADDRESS_REGS; in init_program_limits()
317 prog->MaxUniformComponents = 4 * MAX_UNIFORMS; in init_program_limits()
318 prog->MaxInputComponents = 16 * 4; /* old limit not to break tnl and swrast */ in init_program_limits()
319 prog->MaxOutputComponents = 16 * 4; /* old limit not to break tnl and swrast */ in init_program_limits()
322 prog->MaxParameters = 0; /* not meaningful for compute shaders */ in init_program_limits()
323 prog->MaxAttribs = 0; /* not meaningful for compute shaders */ in init_program_limits()
324 prog->MaxAddressRegs = 0; /* not meaningful for compute shaders */ in init_program_limits()
325 prog->MaxUniformComponents = 4 * MAX_UNIFORMS; in init_program_limits()
326 prog->MaxInputComponents = 0; /* not meaningful for compute shaders */ in init_program_limits()
327 prog->MaxOutputComponents = 0; /* not meaningful for compute shaders */ in init_program_limits()
336 prog->MaxNativeInstructions = 0; in init_program_limits()
337 prog->MaxNativeAluInstructions = 0; in init_program_limits()
338 prog->MaxNativeTexInstructions = 0; in init_program_limits()
339 prog->MaxNativeTexIndirections = 0; in init_program_limits()
340 prog->MaxNativeAttribs = 0; in init_program_limits()
341 prog->MaxNativeTemps = 0; in init_program_limits()
342 prog->MaxNativeAddressRegs = 0; in init_program_limits()
343 prog->MaxNativeParameters = 0; in init_program_limits()
348 prog->MediumFloat.RangeMin = 127; in init_program_limits()
349 prog->MediumFloat.RangeMax = 127; in init_program_limits()
350 prog->MediumFloat.Precision = 23; in init_program_limits()
351 prog->LowFloat = prog->HighFloat = prog->MediumFloat; in init_program_limits()
353 /* Assume ints are stored as floats for now, since this is the least-common in init_program_limits()
356 * single-precision floating point values can only store integers in the in init_program_limits()
357 * range [-0x01000000, 0x01000000] without loss of precision. in init_program_limits()
359 prog->MediumInt.RangeMin = 24; in init_program_limits()
360 prog->MediumInt.RangeMax = 24; in init_program_limits()
361 prog->MediumInt.Precision = 0; in init_program_limits()
362 prog->LowInt = prog->HighInt = prog->MediumInt; in init_program_limits()
364 prog->MaxUniformBlocks = 12; in init_program_limits()
365 prog->MaxCombinedUniformComponents = (prog->MaxUniformComponents + in init_program_limits()
366 consts->MaxUniformBlockSize / 4 * in init_program_limits()
367 prog->MaxUniformBlocks); in init_program_limits()
369 prog->MaxAtomicBuffers = 0; in init_program_limits()
370 prog->MaxAtomicCounters = 0; in init_program_limits()
372 prog->MaxShaderStorageBlocks = 8; in init_program_limits()
377 * Initialize fields of gl_constants (aka ctx->Const.*).
388 consts->MaxTextureMbytes = MAX_TEXTURE_MBYTES; in _mesa_init_constants()
389 consts->MaxTextureSize = 1 << (MAX_TEXTURE_LEVELS - 1); in _mesa_init_constants()
390 consts->Max3DTextureLevels = MAX_TEXTURE_LEVELS; in _mesa_init_constants()
391 consts->MaxCubeTextureLevels = MAX_TEXTURE_LEVELS; in _mesa_init_constants()
392 consts->MaxTextureRectSize = MAX_TEXTURE_RECT_SIZE; in _mesa_init_constants()
393 consts->MaxArrayTextureLayers = MAX_ARRAY_TEXTURE_LAYERS; in _mesa_init_constants()
394 consts->MaxTextureCoordUnits = MAX_TEXTURE_COORD_UNITS; in _mesa_init_constants()
395 consts->Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS; in _mesa_init_constants()
396 consts->MaxTextureUnits = MIN2(consts->MaxTextureCoordUnits, in _mesa_init_constants()
397 consts->Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits); in _mesa_init_constants()
398 consts->MaxTextureMaxAnisotropy = MAX_TEXTURE_MAX_ANISOTROPY; in _mesa_init_constants()
399 consts->MaxTextureLodBias = MAX_TEXTURE_LOD_BIAS; in _mesa_init_constants()
400 consts->MaxTextureBufferSize = 65536; in _mesa_init_constants()
401 consts->TextureBufferOffsetAlignment = 1; in _mesa_init_constants()
402 consts->MaxArrayLockSize = MAX_ARRAY_LOCK_SIZE; in _mesa_init_constants()
403 consts->SubPixelBits = SUB_PIXEL_BITS; in _mesa_init_constants()
404 consts->MinPointSize = MIN_POINT_SIZE; in _mesa_init_constants()
405 consts->MaxPointSize = MAX_POINT_SIZE; in _mesa_init_constants()
406 consts->MinPointSizeAA = MIN_POINT_SIZE; in _mesa_init_constants()
407 consts->MaxPointSizeAA = MAX_POINT_SIZE; in _mesa_init_constants()
408 consts->PointSizeGranularity = (GLfloat) POINT_SIZE_GRANULARITY; in _mesa_init_constants()
409 consts->MinLineWidth = MIN_LINE_WIDTH; in _mesa_init_constants()
410 consts->MaxLineWidth = MAX_LINE_WIDTH; in _mesa_init_constants()
411 consts->MinLineWidthAA = MIN_LINE_WIDTH; in _mesa_init_constants()
412 consts->MaxLineWidthAA = MAX_LINE_WIDTH; in _mesa_init_constants()
413 consts->LineWidthGranularity = (GLfloat) LINE_WIDTH_GRANULARITY; in _mesa_init_constants()
414 consts->MaxClipPlanes = 6; in _mesa_init_constants()
415 consts->MaxLights = MAX_LIGHTS; in _mesa_init_constants()
416 consts->MaxShininess = 128.0; in _mesa_init_constants()
417 consts->MaxSpotExponent = 128.0; in _mesa_init_constants()
418 consts->MaxViewportWidth = 16384; in _mesa_init_constants()
419 consts->MaxViewportHeight = 16384; in _mesa_init_constants()
420 consts->MinMapBufferAlignment = 64; in _mesa_init_constants()
423 consts->MaxViewports = 1; in _mesa_init_constants()
424 consts->ViewportSubpixelBits = 0; in _mesa_init_constants()
425 consts->ViewportBounds.Min = 0; in _mesa_init_constants()
426 consts->ViewportBounds.Max = 0; in _mesa_init_constants()
429 consts->MaxCombinedUniformBlocks = 36; in _mesa_init_constants()
430 consts->MaxUniformBufferBindings = 36; in _mesa_init_constants()
431 consts->MaxUniformBlockSize = 16384; in _mesa_init_constants()
432 consts->UniformBufferOffsetAlignment = 1; in _mesa_init_constants()
435 consts->MaxCombinedShaderStorageBlocks = 8; in _mesa_init_constants()
436 consts->MaxShaderStorageBufferBindings = 8; in _mesa_init_constants()
437 consts->MaxShaderStorageBlockSize = 128 * 1024 * 1024; /* 2^27 */ in _mesa_init_constants()
438 consts->ShaderStorageBufferOffsetAlignment = 256; in _mesa_init_constants()
441 consts->MaxUserAssignableUniformLocations = in _mesa_init_constants()
445 init_program_limits(consts, i, &consts->Program[i]); in _mesa_init_constants()
447 consts->MaxProgramMatrices = MAX_PROGRAM_MATRICES; in _mesa_init_constants()
448 consts->MaxProgramMatrixStackDepth = MAX_PROGRAM_MATRIX_STACK_DEPTH; in _mesa_init_constants()
451 * mean an OpenGL 3.0 forward-compatible context, so that implies a minimum in _mesa_init_constants()
458 consts->GLSLVersion = api == API_OPENGL_CORE ? 130 : 120; in _mesa_init_constants()
459 consts->GLSLVersionCompat = consts->GLSLVersion; in _mesa_init_constants()
461 consts->GLSLLowerConstArrays = true; in _mesa_init_constants()
464 consts->MaxDrawBuffers = MAX_DRAW_BUFFERS; in _mesa_init_constants()
466 consts->MaxColorAttachments = MAX_COLOR_ATTACHMENTS; in _mesa_init_constants()
467 consts->MaxRenderbufferSize = MAX_RENDERBUFFER_SIZE; in _mesa_init_constants()
469 consts->Program[MESA_SHADER_VERTEX].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS; in _mesa_init_constants()
470 consts->MaxCombinedTextureImageUnits = MAX_COMBINED_TEXTURE_IMAGE_UNITS; in _mesa_init_constants()
471 consts->MaxVarying = 16; /* old limit not to break tnl and swrast */ in _mesa_init_constants()
472 consts->Program[MESA_SHADER_GEOMETRY].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS; in _mesa_init_constants()
473 consts->MaxGeometryOutputVertices = MAX_GEOMETRY_OUTPUT_VERTICES; in _mesa_init_constants()
474 consts->MaxGeometryTotalOutputComponents = MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS; in _mesa_init_constants()
475 consts->MaxGeometryShaderInvocations = MAX_GEOMETRY_SHADER_INVOCATIONS; in _mesa_init_constants()
478 consts->GenerateTemporaryNames = true; in _mesa_init_constants()
480 consts->GenerateTemporaryNames = false; in _mesa_init_constants()
484 consts->MaxSamples = 0; in _mesa_init_constants()
487 consts->UniformBooleanTrue = FLOAT_AS_UNION(1.0f).u; in _mesa_init_constants()
490 consts->MaxServerWaitTimeout = 0x7fffffff7fffffffULL; in _mesa_init_constants()
493 consts->QuadsFollowProvokingVertexConvention = GL_TRUE; in _mesa_init_constants()
496 consts->LayerAndVPIndexProvokingVertex = GL_UNDEFINED_VERTEX; in _mesa_init_constants()
499 consts->MaxTransformFeedbackBuffers = MAX_FEEDBACK_BUFFERS; in _mesa_init_constants()
500 consts->MaxTransformFeedbackSeparateComponents = 4 * MAX_FEEDBACK_ATTRIBS; in _mesa_init_constants()
501 consts->MaxTransformFeedbackInterleavedComponents = 4 * MAX_FEEDBACK_ATTRIBS; in _mesa_init_constants()
502 consts->MaxVertexStreams = 1; in _mesa_init_constants()
505 consts->ProfileMask = api == API_OPENGL_CORE in _mesa_init_constants()
510 consts->MaxVertexAttribStride = 2048; in _mesa_init_constants()
513 consts->MinProgramTexelOffset = -8; in _mesa_init_constants()
514 consts->MaxProgramTexelOffset = 7; in _mesa_init_constants()
517 consts->MinProgramTextureGatherOffset = -8; in _mesa_init_constants()
518 consts->MaxProgramTextureGatherOffset = 7; in _mesa_init_constants()
521 consts->ResetStrategy = GL_NO_RESET_NOTIFICATION_ARB; in _mesa_init_constants()
524 consts->RobustAccess = GL_FALSE; in _mesa_init_constants()
527 consts->MaxElementIndex = 0xffffffffu; in _mesa_init_constants()
530 consts->MaxColorTextureSamples = 1; in _mesa_init_constants()
531 consts->MaxDepthTextureSamples = 1; in _mesa_init_constants()
532 consts->MaxIntegerSamples = 1; in _mesa_init_constants()
535 consts->MaxAtomicBufferBindings = MAX_COMBINED_ATOMIC_BUFFERS; in _mesa_init_constants()
536 consts->MaxAtomicBufferSize = MAX_ATOMIC_COUNTERS * ATOMIC_COUNTER_SIZE; in _mesa_init_constants()
537 consts->MaxCombinedAtomicBuffers = MAX_COMBINED_ATOMIC_BUFFERS; in _mesa_init_constants()
538 consts->MaxCombinedAtomicCounters = MAX_ATOMIC_COUNTERS; in _mesa_init_constants()
541 consts->MaxVertexAttribRelativeOffset = 2047; in _mesa_init_constants()
542 consts->MaxVertexAttribBindings = MAX_VERTEX_GENERIC_ATTRIBS; in _mesa_init_constants()
545 consts->MaxComputeWorkGroupCount[0] = 65535; in _mesa_init_constants()
546 consts->MaxComputeWorkGroupCount[1] = 65535; in _mesa_init_constants()
547 consts->MaxComputeWorkGroupCount[2] = 65535; in _mesa_init_constants()
548 consts->MaxComputeWorkGroupSize[0] = 1024; in _mesa_init_constants()
549 consts->MaxComputeWorkGroupSize[1] = 1024; in _mesa_init_constants()
550 consts->MaxComputeWorkGroupSize[2] = 64; in _mesa_init_constants()
552 consts->MaxComputeWorkGroupInvocations = 0; in _mesa_init_constants()
555 consts->MinFragmentInterpolationOffset = MIN_FRAGMENT_INTERPOLATION_OFFSET; in _mesa_init_constants()
556 consts->MaxFragmentInterpolationOffset = MAX_FRAGMENT_INTERPOLATION_OFFSET; in _mesa_init_constants()
559 consts->ContextReleaseBehavior = GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH; in _mesa_init_constants()
562 consts->MaxTessGenLevel = MAX_TESS_GEN_LEVEL; in _mesa_init_constants()
563 consts->MaxPatchVertices = MAX_PATCH_VERTICES; in _mesa_init_constants()
564 consts->Program[MESA_SHADER_TESS_CTRL].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS; in _mesa_init_constants()
565 consts->Program[MESA_SHADER_TESS_EVAL].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS; in _mesa_init_constants()
566 consts->MaxTessPatchComponents = MAX_TESS_PATCH_COMPONENTS; in _mesa_init_constants()
567 consts->MaxTessControlTotalOutputComponents = MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS; in _mesa_init_constants()
568 consts->PrimitiveRestartForPatches = false; in _mesa_init_constants()
571 consts->MaxComputeVariableGroupSize[0] = 512; in _mesa_init_constants()
572 consts->MaxComputeVariableGroupSize[1] = 512; in _mesa_init_constants()
573 consts->MaxComputeVariableGroupSize[2] = 64; in _mesa_init_constants()
574 consts->MaxComputeVariableGroupInvocations = 512; in _mesa_init_constants()
577 consts->MaxSubpixelPrecisionBiasBits = 0; in _mesa_init_constants()
580 consts->ConservativeRasterDilateRange[0] = 0.0; in _mesa_init_constants()
581 consts->ConservativeRasterDilateRange[1] = 0.0; in _mesa_init_constants()
582 consts->ConservativeRasterDilateGranularity = 0.0; in _mesa_init_constants()
584 consts->glBeginEndBufferSize = 512 * 1024; in _mesa_init_constants()
599 (8 * sizeof(ctx->VertexProgram._Current->info.outputs_written))); in check_context_limits()
601 (8 * sizeof(ctx->FragmentProgram._Current->info.inputs_read))); in check_context_limits()
603 /* shader-related checks */ in check_context_limits()
604 assert(ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxLocalParams <= MAX_PROGRAM_LOCAL_PARAMS); in check_context_limits()
605 assert(ctx->Const.Program[MESA_SHADER_VERTEX].MaxLocalParams <= MAX_PROGRAM_LOCAL_PARAMS); in check_context_limits()
608 assert(ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits > 0); in check_context_limits()
609 assert(ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits <= MAX_TEXTURE_IMAGE_UNITS); in check_context_limits()
610 assert(ctx->Const.MaxTextureCoordUnits > 0); in check_context_limits()
611 assert(ctx->Const.MaxTextureCoordUnits <= MAX_TEXTURE_COORD_UNITS); in check_context_limits()
612 assert(ctx->Const.MaxTextureUnits > 0); in check_context_limits()
613 assert(ctx->Const.MaxTextureUnits <= MAX_TEXTURE_IMAGE_UNITS); in check_context_limits()
614 assert(ctx->Const.MaxTextureUnits <= MAX_TEXTURE_COORD_UNITS); in check_context_limits()
615 …assert(ctx->Const.MaxTextureUnits == MIN2(ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImage… in check_context_limits()
616 ctx->Const.MaxTextureCoordUnits)); in check_context_limits()
617 assert(ctx->Const.MaxCombinedTextureImageUnits > 0); in check_context_limits()
618 assert(ctx->Const.MaxCombinedTextureImageUnits <= MAX_COMBINED_TEXTURE_IMAGE_UNITS); in check_context_limits()
619 assert(ctx->Const.MaxTextureCoordUnits <= MAX_COMBINED_TEXTURE_IMAGE_UNITS); in check_context_limits()
621 …assert(ctx->Const.MaxTextureCoordUnits <= ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImage… in check_context_limits()
625 assert(ctx->Const.MaxTextureSize <= (1 << (MAX_TEXTURE_LEVELS - 1))); in check_context_limits()
626 assert(ctx->Const.Max3DTextureLevels <= MAX_TEXTURE_LEVELS); in check_context_limits()
627 assert(ctx->Const.MaxCubeTextureLevels <= MAX_TEXTURE_LEVELS); in check_context_limits()
628 assert(ctx->Const.MaxTextureRectSize <= MAX_TEXTURE_RECT_SIZE); in check_context_limits()
631 assert(ctx->Const.MaxTextureSize <= ctx->Const.MaxViewportWidth); in check_context_limits()
632 assert(ctx->Const.MaxTextureSize <= ctx->Const.MaxViewportHeight); in check_context_limits()
634 assert(ctx->Const.MaxDrawBuffers <= MAX_DRAW_BUFFERS); in check_context_limits()
657 _mesa_init_constants(&ctx->Const, ctx->API); in init_attrib_groups()
660 _mesa_init_extensions(&ctx->Extensions); in init_attrib_groups()
707 ctx->TileRasterOrderIncreasingX = GL_TRUE; in init_attrib_groups()
708 ctx->TileRasterOrderIncreasingY = GL_TRUE; in init_attrib_groups()
709 ctx->NewState = _NEW_ALL; in init_attrib_groups()
710 ctx->NewDriverState = ST_ALL_STATES_MASK; in init_attrib_groups()
711 ctx->ErrorValue = GL_NO_ERROR; in init_attrib_groups()
712 ctx->ShareGroupReset = false; in init_attrib_groups()
713 ctx->IntelBlackholeRender = debug_get_bool_option("INTEL_BLACKHOLE_DEFAULT", false); in init_attrib_groups()
720 * Update default objects in a GL context with respect to shared state.
725 * objects, etc.) and changes to reference those from the current shared
755 * This function is called by the glapi no-op functions. For each OpenGL
756 * function/entrypoint there's a simple no-op function. These "no-op"
790 * Special no-op glFlush, see below.
829 * call stack. That's impossible with one generic no-op function.
861 * populated with pointers to "no-op" functions. In turn, the no-op
868 * In practice, this'll be the same for stand-alone Mesa. But for DRI in _mesa_alloc_dispatch_table()
886 * The specific case which hits this is piglit's primitive-restart in _mesa_alloc_dispatch_table()
914 d->OutsideBeginEnd = _mesa_alloc_dispatch_table(glthread); in _mesa_alloc_dispatch_tables()
915 if (!d->OutsideBeginEnd) in _mesa_alloc_dispatch_tables()
919 d->BeginEnd = _mesa_alloc_dispatch_table(glthread); in _mesa_alloc_dispatch_tables()
920 d->Save = _mesa_alloc_dispatch_table(glthread); in _mesa_alloc_dispatch_tables()
921 if (!d->BeginEnd || !d->Save) in _mesa_alloc_dispatch_tables()
925 d->Current = d->Exec = d->OutsideBeginEnd; in _mesa_alloc_dispatch_tables()
932 free(d->OutsideBeginEnd); in _mesa_free_dispatch_tables()
933 free(d->BeginEnd); in _mesa_free_dispatch_tables()
934 free(d->HWSelectModeBeginEnd); in _mesa_free_dispatch_tables()
935 free(d->Save); in _mesa_free_dispatch_tables()
936 free(d->ContextLost); in _mesa_free_dispatch_tables()
942 if (!_mesa_alloc_dispatch_tables(ctx->API, &ctx->Dispatch, false)) in _mesa_initialize_dispatch_tables()
945 /* Do the code-generated initialization of dispatch tables. */ in _mesa_initialize_dispatch_tables()
957 ctx->GLApi = ctx->Dispatch.Current; in _mesa_initialize_dispatch_tables()
973 * miscellaneous one-time initializations. If no shared context is supplied one
996 struct gl_shared_state *shared; in _mesa_initialize_context() local
1017 ctx->API = api; in _mesa_initialize_context()
1018 ctx->DrawBuffer = NULL; in _mesa_initialize_context()
1019 ctx->ReadBuffer = NULL; in _mesa_initialize_context()
1020 ctx->WinSysDrawBuffer = NULL; in _mesa_initialize_context()
1021 ctx->WinSysReadBuffer = NULL; in _mesa_initialize_context()
1024 ctx->Visual = *visual; in _mesa_initialize_context()
1025 ctx->HasConfig = GL_TRUE; in _mesa_initialize_context()
1028 memset(&ctx->Visual, 0, sizeof ctx->Visual); in _mesa_initialize_context()
1029 ctx->HasConfig = GL_FALSE; in _mesa_initialize_context()
1034 /* misc one-time initializations */ in _mesa_initialize_context()
1039 * we'll call ctx->Driver.NewTextureObject() to create the default in _mesa_initialize_context()
1042 ctx->Driver = *driverFunctions; in _mesa_initialize_context()
1046 shared = share_list->Shared; in _mesa_initialize_context()
1050 shared = _mesa_alloc_shared_state(ctx); in _mesa_initialize_context()
1051 if (!shared) in _mesa_initialize_context()
1056 ctx->Const.DriverSupportedPrimMask = 0xffffffff; in _mesa_initialize_context()
1058 _mesa_reference_shared_state(ctx, &ctx->Shared, shared); in _mesa_initialize_context()
1064 ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR; in _mesa_initialize_context()
1072 memset(&ctx->TextureFormatSupported, GL_TRUE, in _mesa_initialize_context()
1073 sizeof(ctx->TextureFormatSupported)); in _mesa_initialize_context()
1075 switch (ctx->API) { in _mesa_initialize_context()
1085 for (i = 0; i < ARRAY_SIZE(ctx->Texture.FixedFuncUnit); i++) { in _mesa_initialize_context()
1087 &ctx->Texture.FixedFuncUnit[i]; in _mesa_initialize_context()
1089 texUnit->GenS.Mode = GL_REFLECTION_MAP_NV; in _mesa_initialize_context()
1090 texUnit->GenT.Mode = GL_REFLECTION_MAP_NV; in _mesa_initialize_context()
1091 texUnit->GenR.Mode = GL_REFLECTION_MAP_NV; in _mesa_initialize_context()
1092 texUnit->GenS._ModeBit = TEXGEN_REFLECTION_MAP_NV; in _mesa_initialize_context()
1093 texUnit->GenT._ModeBit = TEXGEN_REFLECTION_MAP_NV; in _mesa_initialize_context()
1094 texUnit->GenR._ModeBit = TEXGEN_REFLECTION_MAP_NV; in _mesa_initialize_context()
1098 ctx->VertexProgram.PointSizeEnabled = _mesa_is_gles2(ctx); in _mesa_initialize_context()
1099 ctx->PointSizeIsSet = GL_TRUE; in _mesa_initialize_context()
1101 ctx->FirstTimeCurrent = GL_TRUE; in _mesa_initialize_context()
1106 _mesa_reference_shared_state(ctx, &ctx->Shared, NULL); in _mesa_initialize_context()
1129 _mesa_reference_framebuffer(&ctx->WinSysDrawBuffer, NULL); in _mesa_free_context_data()
1130 _mesa_reference_framebuffer(&ctx->WinSysReadBuffer, NULL); in _mesa_free_context_data()
1131 _mesa_reference_framebuffer(&ctx->DrawBuffer, NULL); in _mesa_free_context_data()
1132 _mesa_reference_framebuffer(&ctx->ReadBuffer, NULL); in _mesa_free_context_data()
1134 _mesa_reference_program(ctx, &ctx->VertexProgram.Current, NULL); in _mesa_free_context_data()
1135 _mesa_reference_program(ctx, &ctx->VertexProgram._Current, NULL); in _mesa_free_context_data()
1136 _mesa_reference_program(ctx, &ctx->VertexProgram._TnlProgram, NULL); in _mesa_free_context_data()
1138 _mesa_reference_program(ctx, &ctx->TessCtrlProgram._Current, NULL); in _mesa_free_context_data()
1139 _mesa_reference_program(ctx, &ctx->TessEvalProgram._Current, NULL); in _mesa_free_context_data()
1140 _mesa_reference_program(ctx, &ctx->GeometryProgram._Current, NULL); in _mesa_free_context_data()
1142 _mesa_reference_program(ctx, &ctx->FragmentProgram.Current, NULL); in _mesa_free_context_data()
1143 _mesa_reference_program(ctx, &ctx->FragmentProgram._Current, NULL); in _mesa_free_context_data()
1144 _mesa_reference_program(ctx, &ctx->FragmentProgram._TexEnvProgram, NULL); in _mesa_free_context_data()
1146 _mesa_reference_program(ctx, &ctx->ComputeProgram._Current, NULL); in _mesa_free_context_data()
1148 _mesa_reference_vao(ctx, &ctx->Array.VAO, NULL); in _mesa_free_context_data()
1149 _mesa_reference_vao(ctx, &ctx->Array.DefaultVAO, NULL); in _mesa_free_context_data()
1150 _mesa_reference_vao(ctx, &ctx->Array._DrawVAO, NULL); in _mesa_free_context_data()
1170 _mesa_reference_buffer_object(ctx, &ctx->Pack.BufferObj, NULL); in _mesa_free_context_data()
1171 _mesa_reference_buffer_object(ctx, &ctx->Unpack.BufferObj, NULL); in _mesa_free_context_data()
1172 _mesa_reference_buffer_object(ctx, &ctx->DefaultPacking.BufferObj, NULL); in _mesa_free_context_data()
1173 _mesa_reference_buffer_object(ctx, &ctx->Array.ArrayBufferObj, NULL); in _mesa_free_context_data()
1181 _mesa_free_dispatch_tables(&ctx->Dispatch); in _mesa_free_context_data()
1182 free(ctx->MarshalExec); in _mesa_free_context_data()
1184 /* Shared context state (display lists, textures, etc) */ in _mesa_free_context_data()
1185 _mesa_reference_shared_state(ctx, &ctx->Shared, NULL); in _mesa_free_context_data()
1190 free((void *)ctx->Extensions.String); in _mesa_free_context_data()
1192 free(ctx->VersionString); in _mesa_free_context_data()
1194 ralloc_free(ctx->SoftFP64); in _mesa_free_context_data()
1202 if (ctx->shader_builtin_ref) { in _mesa_free_context_data()
1204 ctx->shader_builtin_ref = false; in _mesa_free_context_data()
1207 free(ctx->Const.SpirVExtensions); in _mesa_free_context_data()
1208 free(ctx->tmp_draws); in _mesa_free_context_data()
1230 dst->Accum = src->Accum; in _mesa_copy_context()
1234 dst->Color = src->Color; in _mesa_copy_context()
1238 dst->Current = src->Current; in _mesa_copy_context()
1242 dst->Depth = src->Depth; in _mesa_copy_context()
1249 dst->Eval = src->Eval; in _mesa_copy_context()
1253 dst->Fog = src->Fog; in _mesa_copy_context()
1257 dst->Hint = src->Hint; in _mesa_copy_context()
1261 dst->Light = src->Light; in _mesa_copy_context()
1265 dst->Line = src->Line; in _mesa_copy_context()
1269 dst->List = src->List; in _mesa_copy_context()
1273 dst->Pixel = src->Pixel; in _mesa_copy_context()
1277 dst->Point = src->Point; in _mesa_copy_context()
1281 dst->Polygon = src->Polygon; in _mesa_copy_context()
1289 dst->PolygonStipple[i] = src->PolygonStipple[i]; in _mesa_copy_context()
1294 dst->Scissor = src->Scissor; in _mesa_copy_context()
1298 dst->Stencil = src->Stencil; in _mesa_copy_context()
1306 dst->Transform = src->Transform; in _mesa_copy_context()
1310 for (i = 0; i < src->Const.MaxViewports; i++) { in _mesa_copy_context()
1312 dst->ViewportArray[i] = src->ViewportArray[i]; in _mesa_copy_context()
1318 dst->NewState = _NEW_ALL; in _mesa_copy_context()
1319 dst->NewDriverState = ST_ALL_STATES_MASK; in _mesa_copy_context()
1333 const struct gl_config *ctxvis = &ctx->Visual; in check_compatible()
1334 const struct gl_config *bufvis = &buffer->Visual; in check_compatible()
1340 if (ctxvis->foo && bufvis->foo && \ in check_compatible()
1341 ctxvis->foo != bufvis->foo) \ in check_compatible()
1361 * Initialize the size if the given width and height are non-zero.
1366 if (!ctx->ViewportInitialized && width > 0 && height > 0) { in check_init_viewport()
1372 ctx->ViewportInitialized = GL_TRUE; in check_init_viewport()
1374 /* Note: ctx->Const.MaxViewports may not have been set by the driver in check_init_viewport()
1388 if (ctx->Version == 0 || !ctx->DrawBuffer) { in handle_first_current()
1401 if (!ctx->HasConfig && _mesa_is_desktop_gl(ctx)) { in handle_first_current()
1402 if (ctx->DrawBuffer != _mesa_get_incomplete_framebuffer()) { in handle_first_current()
1405 if (ctx->DrawBuffer->Visual.doubleBufferMode) in handle_first_current()
1410 _mesa_drawbuffers(ctx, ctx->DrawBuffer, 1, &buffer, in handle_first_current()
1414 if (ctx->ReadBuffer != _mesa_get_incomplete_framebuffer()) { in handle_first_current()
1418 if (ctx->ReadBuffer->Visual.doubleBufferMode) { in handle_first_current()
1427 _mesa_readbuffer(ctx, ctx->ReadBuffer, buffer, bufferIndex); in handle_first_current()
1436 ctx->Const.ContextFlags & GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT; in handle_first_current()
1438 /* In OpenGL 3.1 attribute 0 becomes non-magic, just like in OpenGL ES in handle_first_current()
1440 * that will erroneously allow this usage in a 3.0 forward-compatible in handle_first_current()
1443 ctx->_AttribZeroAliasesVertex = (_mesa_is_gles1(ctx) in handle_first_current()
1484 if (newCtx && drawBuffer && newCtx->WinSysDrawBuffer != drawBuffer) { in _mesa_make_current()
1491 if (newCtx && readBuffer && newCtx->WinSysReadBuffer != readBuffer) { in _mesa_make_current()
1502 curCtx->Const.ContextReleaseBehavior == in _mesa_make_current()
1505 if (curCtx->st){ in _mesa_make_current()
1517 _mesa_reference_framebuffer(&curCtx->WinSysDrawBuffer, NULL); in _mesa_make_current()
1518 _mesa_reference_framebuffer(&curCtx->WinSysReadBuffer, NULL); in _mesa_make_current()
1526 _glapi_set_dispatch(newCtx->GLApi); in _mesa_make_current()
1531 _mesa_reference_framebuffer(&newCtx->WinSysDrawBuffer, drawBuffer); in _mesa_make_current()
1532 _mesa_reference_framebuffer(&newCtx->WinSysReadBuffer, readBuffer); in _mesa_make_current()
1536 * or not bound to a user-created FBO. in _mesa_make_current()
1538 if (!newCtx->DrawBuffer || _mesa_is_winsys_fbo(newCtx->DrawBuffer)) { in _mesa_make_current()
1539 _mesa_reference_framebuffer(&newCtx->DrawBuffer, drawBuffer); in _mesa_make_current()
1548 if (!newCtx->ReadBuffer || _mesa_is_winsys_fbo(newCtx->ReadBuffer)) { in _mesa_make_current()
1549 _mesa_reference_framebuffer(&newCtx->ReadBuffer, readBuffer); in _mesa_make_current()
1550 /* In _mesa_initialize_window_framebuffer, for single-buffered in _mesa_make_current()
1557 !newCtx->ReadBuffer->Visual.doubleBufferMode) in _mesa_make_current()
1558 if (newCtx->ReadBuffer->ColorReadBuffer == GL_FRONT) in _mesa_make_current()
1559 newCtx->ReadBuffer->ColorReadBuffer = GL_BACK; in _mesa_make_current()
1565 newCtx->NewState |= _NEW_BUFFERS; in _mesa_make_current()
1567 check_init_viewport(newCtx, drawBuffer->Width, drawBuffer->Height); in _mesa_make_current()
1570 if (newCtx->FirstTimeCurrent) { in _mesa_make_current()
1572 newCtx->FirstTimeCurrent = GL_FALSE; in _mesa_make_current()
1589 if (ctx && ctxToShare && ctx->Shared && ctxToShare->Shared) { in _mesa_share_state()
1593 _mesa_reference_shared_state(ctx, &oldShared, ctx->Shared); in _mesa_share_state()
1595 /* update ctx's Shared pointer */ in _mesa_share_state()
1596 _mesa_reference_shared_state(ctx, &ctx->Shared, ctxToShare->Shared); in _mesa_share_state()
1600 /* release the old shared state */ in _mesa_share_state()
1638 bool async = !ctx->Shared->HasExternallySharedImages; in _mesa_flush()