• Home
  • Raw
  • Download

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
121 #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
236 * Calls all the various one-time-init functions in Mesa.
239 * and sets the glapi callbacks if the \c MESA_DEBUG environment variable is
252 * Initialize fields of gl_current_attrib (aka ctx->Current.*)
260 for (i = 0; i < ARRAY_SIZE(ctx->Current.Attrib); i++) { in _mesa_init_current()
261 ASSIGN_4V( ctx->Current.Attrib[i], 0.0, 0.0, 0.0, 1.0 ); in _mesa_init_current()
265 ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_NORMAL], 0.0, 0.0, 1.0, 1.0 ); in _mesa_init_current()
266 ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_COLOR0], 1.0, 1.0, 1.0, 1.0 ); in _mesa_init_current()
267 ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_COLOR1], 0.0, 0.0, 0.0, 1.0 ); in _mesa_init_current()
268 ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX], 1.0, 0.0, 0.0, 1.0 ); in _mesa_init_current()
269 ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_EDGEFLAG], 1.0, 0.0, 0.0, 1.0 ); in _mesa_init_current()
281 prog->MaxInstructions = MAX_PROGRAM_INSTRUCTIONS; in init_program_limits()
282 prog->MaxAluInstructions = MAX_PROGRAM_INSTRUCTIONS; in init_program_limits()
283 prog->MaxTexInstructions = MAX_PROGRAM_INSTRUCTIONS; in init_program_limits()
284 prog->MaxTexIndirections = MAX_PROGRAM_INSTRUCTIONS; in init_program_limits()
285 prog->MaxTemps = MAX_PROGRAM_TEMPS; in init_program_limits()
286 prog->MaxEnvParams = MAX_PROGRAM_ENV_PARAMS; in init_program_limits()
287 prog->MaxLocalParams = MAX_PROGRAM_LOCAL_PARAMS; in init_program_limits()
288 prog->MaxAddressOffset = MAX_PROGRAM_LOCAL_PARAMS; in init_program_limits()
289 prog->MaxAddressRegs = 0; /* only meaningful for vertex/fragment shaders */ in init_program_limits()
293 prog->MaxParameters = MAX_VERTEX_PROGRAM_PARAMS; in init_program_limits()
294 prog->MaxAttribs = MAX_VERTEX_GENERIC_ATTRIBS; in init_program_limits()
295 prog->MaxAddressRegs = MAX_VERTEX_PROGRAM_ADDRESS_REGS; in init_program_limits()
296 prog->MaxUniformComponents = 4 * MAX_UNIFORMS; in init_program_limits()
297 prog->MaxInputComponents = 0; /* value not used */ in init_program_limits()
298 prog->MaxOutputComponents = 16 * 4; /* old limit not to break tnl and swrast */ in init_program_limits()
301 prog->MaxParameters = MAX_FRAGMENT_PROGRAM_PARAMS; in init_program_limits()
302 prog->MaxAttribs = MAX_FRAGMENT_PROGRAM_INPUTS; in init_program_limits()
303 prog->MaxAddressRegs = MAX_FRAGMENT_PROGRAM_ADDRESS_REGS; in init_program_limits()
304 prog->MaxUniformComponents = 4 * MAX_UNIFORMS; in init_program_limits()
305 prog->MaxInputComponents = 16 * 4; /* old limit not to break tnl and swrast */ in init_program_limits()
306 prog->MaxOutputComponents = 0; /* value not used */ in init_program_limits()
311 prog->MaxParameters = MAX_VERTEX_PROGRAM_PARAMS; in init_program_limits()
312 prog->MaxAttribs = MAX_VERTEX_GENERIC_ATTRIBS; in init_program_limits()
313 prog->MaxUniformComponents = 4 * MAX_UNIFORMS; in init_program_limits()
314 prog->MaxInputComponents = 16 * 4; /* old limit not to break tnl and swrast */ in init_program_limits()
315 prog->MaxOutputComponents = 16 * 4; /* old limit not to break tnl and swrast */ in init_program_limits()
318 prog->MaxParameters = 0; /* not meaningful for compute shaders */ in init_program_limits()
319 prog->MaxAttribs = 0; /* not meaningful for compute shaders */ in init_program_limits()
320 prog->MaxUniformComponents = 4 * MAX_UNIFORMS; in init_program_limits()
321 prog->MaxInputComponents = 0; /* not meaningful for compute shaders */ in init_program_limits()
322 prog->MaxOutputComponents = 0; /* not meaningful for compute shaders */ in init_program_limits()
331 prog->MediumFloat.RangeMin = 127; in init_program_limits()
332 prog->MediumFloat.RangeMax = 127; in init_program_limits()
333 prog->MediumFloat.Precision = 23; in init_program_limits()
334 prog->LowFloat = prog->HighFloat = prog->MediumFloat; in init_program_limits()
336 /* Assume ints are stored as floats for now, since this is the least-common in init_program_limits()
339 * single-precision floating point values can only store integers in the in init_program_limits()
340 * range [-0x01000000, 0x01000000] without loss of precision. in init_program_limits()
342 prog->MediumInt.RangeMin = 24; in init_program_limits()
343 prog->MediumInt.RangeMax = 24; in init_program_limits()
344 prog->MediumInt.Precision = 0; in init_program_limits()
345 prog->LowInt = prog->HighInt = prog->MediumInt; in init_program_limits()
347 prog->MaxUniformBlocks = 12; in init_program_limits()
348 prog->MaxCombinedUniformComponents = (prog->MaxUniformComponents + in init_program_limits()
349 consts->MaxUniformBlockSize / 4 * in init_program_limits()
350 prog->MaxUniformBlocks); in init_program_limits()
352 prog->MaxAtomicBuffers = 0; in init_program_limits()
353 prog->MaxAtomicCounters = 0; in init_program_limits()
355 prog->MaxShaderStorageBlocks = 8; in init_program_limits()
360 * Initialize fields of gl_constants (aka ctx->Const.*).
371 consts->MaxTextureMbytes = MAX_TEXTURE_MBYTES; in _mesa_init_constants()
372 consts->MaxTextureSize = 1 << (MAX_TEXTURE_LEVELS - 1); in _mesa_init_constants()
373 consts->Max3DTextureLevels = MAX_TEXTURE_LEVELS; in _mesa_init_constants()
374 consts->MaxCubeTextureLevels = MAX_TEXTURE_LEVELS; in _mesa_init_constants()
375 consts->MaxTextureRectSize = MAX_TEXTURE_RECT_SIZE; in _mesa_init_constants()
376 consts->MaxArrayTextureLayers = MAX_ARRAY_TEXTURE_LAYERS; in _mesa_init_constants()
377 consts->MaxTextureCoordUnits = MAX_TEXTURE_COORD_UNITS; in _mesa_init_constants()
378 consts->Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS; in _mesa_init_constants()
379 consts->MaxTextureUnits = MIN2(consts->MaxTextureCoordUnits, in _mesa_init_constants()
380 consts->Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits); in _mesa_init_constants()
381 consts->MaxTextureMaxAnisotropy = MAX_TEXTURE_MAX_ANISOTROPY; in _mesa_init_constants()
382 consts->MaxTextureLodBias = MAX_TEXTURE_LOD_BIAS; in _mesa_init_constants()
383 consts->MaxTextureBufferSize = 65536; in _mesa_init_constants()
384 consts->TextureBufferOffsetAlignment = 1; in _mesa_init_constants()
385 consts->MaxArrayLockSize = MAX_ARRAY_LOCK_SIZE; in _mesa_init_constants()
386 consts->SubPixelBits = SUB_PIXEL_BITS; in _mesa_init_constants()
387 consts->MinPointSize = MIN_POINT_SIZE; in _mesa_init_constants()
388 consts->MaxPointSize = MAX_POINT_SIZE; in _mesa_init_constants()
389 consts->MinPointSizeAA = MIN_POINT_SIZE; in _mesa_init_constants()
390 consts->MaxPointSizeAA = MAX_POINT_SIZE; in _mesa_init_constants()
391 consts->PointSizeGranularity = (GLfloat) POINT_SIZE_GRANULARITY; in _mesa_init_constants()
392 consts->MinLineWidth = MIN_LINE_WIDTH; in _mesa_init_constants()
393 consts->MaxLineWidth = MAX_LINE_WIDTH; in _mesa_init_constants()
394 consts->MinLineWidthAA = MIN_LINE_WIDTH; in _mesa_init_constants()
395 consts->MaxLineWidthAA = MAX_LINE_WIDTH; in _mesa_init_constants()
396 consts->LineWidthGranularity = (GLfloat) LINE_WIDTH_GRANULARITY; in _mesa_init_constants()
397 consts->MaxClipPlanes = 6; in _mesa_init_constants()
398 consts->MaxLights = MAX_LIGHTS; in _mesa_init_constants()
399 consts->MaxShininess = 128.0; in _mesa_init_constants()
400 consts->MaxSpotExponent = 128.0; in _mesa_init_constants()
401 consts->MaxViewportWidth = 16384; in _mesa_init_constants()
402 consts->MaxViewportHeight = 16384; in _mesa_init_constants()
403 consts->MinMapBufferAlignment = 64; in _mesa_init_constants()
406 consts->MaxViewports = 1; in _mesa_init_constants()
407 consts->ViewportSubpixelBits = 0; in _mesa_init_constants()
408 consts->ViewportBounds.Min = 0; in _mesa_init_constants()
409 consts->ViewportBounds.Max = 0; in _mesa_init_constants()
412 consts->MaxCombinedUniformBlocks = 36; in _mesa_init_constants()
413 consts->MaxUniformBufferBindings = 36; in _mesa_init_constants()
414 consts->MaxUniformBlockSize = 16384; in _mesa_init_constants()
415 consts->UniformBufferOffsetAlignment = 1; in _mesa_init_constants()
418 consts->MaxCombinedShaderStorageBlocks = 8; in _mesa_init_constants()
419 consts->MaxShaderStorageBufferBindings = 8; in _mesa_init_constants()
420 consts->MaxShaderStorageBlockSize = 128 * 1024 * 1024; /* 2^27 */ in _mesa_init_constants()
421 consts->ShaderStorageBufferOffsetAlignment = 256; in _mesa_init_constants()
424 consts->MaxUserAssignableUniformLocations = in _mesa_init_constants()
428 init_program_limits(consts, i, &consts->Program[i]); in _mesa_init_constants()
430 consts->MaxProgramMatrices = MAX_PROGRAM_MATRICES; in _mesa_init_constants()
431 consts->MaxProgramMatrixStackDepth = MAX_PROGRAM_MATRIX_STACK_DEPTH; in _mesa_init_constants()
434 * mean an OpenGL 3.0 forward-compatible context, so that implies a minimum in _mesa_init_constants()
441 consts->GLSLVersion = api == API_OPENGL_CORE ? 130 : 120; in _mesa_init_constants()
442 consts->GLSLVersionCompat = consts->GLSLVersion; in _mesa_init_constants()
444 consts->GLSLLowerConstArrays = true; in _mesa_init_constants()
447 consts->MaxDrawBuffers = MAX_DRAW_BUFFERS; in _mesa_init_constants()
449 consts->MaxColorAttachments = MAX_COLOR_ATTACHMENTS; in _mesa_init_constants()
450 consts->MaxRenderbufferSize = MAX_RENDERBUFFER_SIZE; in _mesa_init_constants()
452 consts->Program[MESA_SHADER_VERTEX].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS; in _mesa_init_constants()
453 consts->MaxCombinedTextureImageUnits = MAX_COMBINED_TEXTURE_IMAGE_UNITS; in _mesa_init_constants()
454 consts->MaxVarying = 16; /* old limit not to break tnl and swrast */ in _mesa_init_constants()
455 consts->Program[MESA_SHADER_GEOMETRY].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS; in _mesa_init_constants()
456 consts->MaxGeometryOutputVertices = MAX_GEOMETRY_OUTPUT_VERTICES; in _mesa_init_constants()
457 consts->MaxGeometryTotalOutputComponents = MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS; in _mesa_init_constants()
458 consts->MaxGeometryShaderInvocations = MAX_GEOMETRY_SHADER_INVOCATIONS; in _mesa_init_constants()
461 consts->GenerateTemporaryNames = true; in _mesa_init_constants()
463 consts->GenerateTemporaryNames = false; in _mesa_init_constants()
467 consts->MaxSamples = 0; in _mesa_init_constants()
470 consts->UniformBooleanTrue = FLOAT_AS_UNION(1.0f).u; in _mesa_init_constants()
473 consts->MaxServerWaitTimeout = 0x7fffffff7fffffffULL; in _mesa_init_constants()
476 consts->QuadsFollowProvokingVertexConvention = GL_TRUE; in _mesa_init_constants()
479 consts->LayerAndVPIndexProvokingVertex = GL_UNDEFINED_VERTEX; in _mesa_init_constants()
482 consts->MaxTransformFeedbackBuffers = MAX_FEEDBACK_BUFFERS; in _mesa_init_constants()
483 consts->MaxTransformFeedbackSeparateComponents = 4 * MAX_FEEDBACK_ATTRIBS; in _mesa_init_constants()
484 consts->MaxTransformFeedbackInterleavedComponents = 4 * MAX_FEEDBACK_ATTRIBS; in _mesa_init_constants()
485 consts->MaxVertexStreams = 1; in _mesa_init_constants()
488 consts->ProfileMask = api == API_OPENGL_CORE in _mesa_init_constants()
493 consts->MaxVertexAttribStride = 2048; in _mesa_init_constants()
496 consts->MinProgramTexelOffset = -8; in _mesa_init_constants()
497 consts->MaxProgramTexelOffset = 7; in _mesa_init_constants()
500 consts->MinProgramTextureGatherOffset = -8; in _mesa_init_constants()
501 consts->MaxProgramTextureGatherOffset = 7; in _mesa_init_constants()
504 consts->ResetStrategy = GL_NO_RESET_NOTIFICATION_ARB; in _mesa_init_constants()
507 consts->RobustAccess = GL_FALSE; in _mesa_init_constants()
510 consts->MaxElementIndex = 0xffffffffu; in _mesa_init_constants()
513 consts->MaxColorTextureSamples = 1; in _mesa_init_constants()
514 consts->MaxDepthTextureSamples = 1; in _mesa_init_constants()
515 consts->MaxIntegerSamples = 1; in _mesa_init_constants()
518 consts->MaxAtomicBufferBindings = MAX_COMBINED_ATOMIC_BUFFERS; in _mesa_init_constants()
519 consts->MaxAtomicBufferSize = MAX_ATOMIC_COUNTERS * ATOMIC_COUNTER_SIZE; in _mesa_init_constants()
520 consts->MaxCombinedAtomicBuffers = MAX_COMBINED_ATOMIC_BUFFERS; in _mesa_init_constants()
521 consts->MaxCombinedAtomicCounters = MAX_ATOMIC_COUNTERS; in _mesa_init_constants()
524 consts->MaxVertexAttribRelativeOffset = 2047; in _mesa_init_constants()
525 consts->MaxVertexAttribBindings = MAX_VERTEX_GENERIC_ATTRIBS; in _mesa_init_constants()
528 consts->MaxComputeWorkGroupCount[0] = 65535; in _mesa_init_constants()
529 consts->MaxComputeWorkGroupCount[1] = 65535; in _mesa_init_constants()
530 consts->MaxComputeWorkGroupCount[2] = 65535; in _mesa_init_constants()
531 consts->MaxComputeWorkGroupSize[0] = 1024; in _mesa_init_constants()
532 consts->MaxComputeWorkGroupSize[1] = 1024; in _mesa_init_constants()
533 consts->MaxComputeWorkGroupSize[2] = 64; in _mesa_init_constants()
535 consts->MaxComputeWorkGroupInvocations = 0; in _mesa_init_constants()
538 consts->MinFragmentInterpolationOffset = MIN_FRAGMENT_INTERPOLATION_OFFSET; in _mesa_init_constants()
539 consts->MaxFragmentInterpolationOffset = MAX_FRAGMENT_INTERPOLATION_OFFSET; in _mesa_init_constants()
542 consts->ContextReleaseBehavior = GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH; in _mesa_init_constants()
545 consts->MaxTessGenLevel = MAX_TESS_GEN_LEVEL; in _mesa_init_constants()
546 consts->MaxPatchVertices = MAX_PATCH_VERTICES; in _mesa_init_constants()
547 consts->Program[MESA_SHADER_TESS_CTRL].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS; in _mesa_init_constants()
548 consts->Program[MESA_SHADER_TESS_EVAL].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS; in _mesa_init_constants()
549 consts->MaxTessPatchComponents = MAX_TESS_PATCH_COMPONENTS; in _mesa_init_constants()
550 consts->MaxTessControlTotalOutputComponents = MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS; in _mesa_init_constants()
551 consts->PrimitiveRestartForPatches = false; in _mesa_init_constants()
554 consts->MaxComputeVariableGroupSize[0] = 512; in _mesa_init_constants()
555 consts->MaxComputeVariableGroupSize[1] = 512; in _mesa_init_constants()
556 consts->MaxComputeVariableGroupSize[2] = 64; in _mesa_init_constants()
557 consts->MaxComputeVariableGroupInvocations = 512; in _mesa_init_constants()
560 consts->MaxSubpixelPrecisionBiasBits = 0; in _mesa_init_constants()
563 consts->ConservativeRasterDilateRange[0] = 0.0; in _mesa_init_constants()
564 consts->ConservativeRasterDilateRange[1] = 0.0; in _mesa_init_constants()
565 consts->ConservativeRasterDilateGranularity = 0.0; in _mesa_init_constants()
567 consts->glBeginEndBufferSize = 512 * 1024; in _mesa_init_constants()
582 (8 * sizeof(ctx->VertexProgram._Current->info.outputs_written))); in check_context_limits()
584 (8 * sizeof(ctx->FragmentProgram._Current->info.inputs_read))); in check_context_limits()
586 /* shader-related checks */ in check_context_limits()
587 assert(ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxLocalParams <= MAX_PROGRAM_LOCAL_PARAMS); in check_context_limits()
588 assert(ctx->Const.Program[MESA_SHADER_VERTEX].MaxLocalParams <= MAX_PROGRAM_LOCAL_PARAMS); in check_context_limits()
591 assert(ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits > 0); in check_context_limits()
592 assert(ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits <= MAX_TEXTURE_IMAGE_UNITS); in check_context_limits()
593 assert(ctx->Const.MaxTextureCoordUnits > 0); in check_context_limits()
594 assert(ctx->Const.MaxTextureCoordUnits <= MAX_TEXTURE_COORD_UNITS); in check_context_limits()
595 assert(ctx->Const.MaxTextureUnits > 0); in check_context_limits()
596 assert(ctx->Const.MaxTextureUnits <= MAX_TEXTURE_IMAGE_UNITS); in check_context_limits()
597 assert(ctx->Const.MaxTextureUnits <= MAX_TEXTURE_COORD_UNITS); in check_context_limits()
598 …assert(ctx->Const.MaxTextureUnits == MIN2(ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImage… in check_context_limits()
599 ctx->Const.MaxTextureCoordUnits)); in check_context_limits()
600 assert(ctx->Const.MaxCombinedTextureImageUnits > 0); in check_context_limits()
601 assert(ctx->Const.MaxCombinedTextureImageUnits <= MAX_COMBINED_TEXTURE_IMAGE_UNITS); in check_context_limits()
602 assert(ctx->Const.MaxTextureCoordUnits <= MAX_COMBINED_TEXTURE_IMAGE_UNITS); in check_context_limits()
604 …assert(ctx->Const.MaxTextureCoordUnits <= ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImage… in check_context_limits()
608 assert(ctx->Const.MaxTextureSize <= (1 << (MAX_TEXTURE_LEVELS - 1))); in check_context_limits()
609 assert(ctx->Const.Max3DTextureLevels <= MAX_TEXTURE_LEVELS); in check_context_limits()
610 assert(ctx->Const.MaxCubeTextureLevels <= MAX_TEXTURE_LEVELS); in check_context_limits()
611 assert(ctx->Const.MaxTextureRectSize <= MAX_TEXTURE_RECT_SIZE); in check_context_limits()
614 assert(ctx->Const.MaxTextureSize <= ctx->Const.MaxViewportWidth); in check_context_limits()
615 assert(ctx->Const.MaxTextureSize <= ctx->Const.MaxViewportHeight); in check_context_limits()
617 assert(ctx->Const.MaxDrawBuffers <= MAX_DRAW_BUFFERS); in check_context_limits()
640 _mesa_init_constants(&ctx->Const, ctx->API); in init_attrib_groups()
643 _mesa_init_extensions(&ctx->Extensions); in init_attrib_groups()
690 ctx->TileRasterOrderIncreasingX = GL_TRUE; in init_attrib_groups()
691 ctx->TileRasterOrderIncreasingY = GL_TRUE; in init_attrib_groups()
692 ctx->NewState = _NEW_ALL; in init_attrib_groups()
693 ctx->NewDriverState = ST_ALL_STATES_MASK; in init_attrib_groups()
694 ctx->ErrorValue = GL_NO_ERROR; in init_attrib_groups()
695 ctx->ShareGroupReset = false; in init_attrib_groups()
696 ctx->IntelBlackholeRender = debug_get_bool_option("INTEL_BLACKHOLE_DEFAULT", false); in init_attrib_groups()
703 * Update default objects in a GL context with respect to shared state.
708 * objects, etc.) and changes to reference those from the current shared
738 * This function is called by the glapi no-op functions. For each OpenGL
739 * function/entrypoint there's a simple no-op function. These "no-op"
773 * Special no-op glFlush, see below.
812 * call stack. That's impossible with one generic no-op function.
844 * populated with pointers to "no-op" functions. In turn, the no-op
851 * In practice, this'll be the same for stand-alone Mesa. But for DRI in _mesa_alloc_dispatch_table()
869 * The specific case which hits this is piglit's primitive-restart in _mesa_alloc_dispatch_table()
897 d->OutsideBeginEnd = _mesa_alloc_dispatch_table(glthread); in _mesa_alloc_dispatch_tables()
898 if (!d->OutsideBeginEnd) in _mesa_alloc_dispatch_tables()
902 d->BeginEnd = _mesa_alloc_dispatch_table(glthread); in _mesa_alloc_dispatch_tables()
903 d->Save = _mesa_alloc_dispatch_table(glthread); in _mesa_alloc_dispatch_tables()
904 if (!d->BeginEnd || !d->Save) in _mesa_alloc_dispatch_tables()
908 d->Current = d->Exec = d->OutsideBeginEnd; in _mesa_alloc_dispatch_tables()
915 free(d->OutsideBeginEnd); in _mesa_free_dispatch_tables()
916 free(d->BeginEnd); in _mesa_free_dispatch_tables()
917 free(d->HWSelectModeBeginEnd); in _mesa_free_dispatch_tables()
918 free(d->Save); in _mesa_free_dispatch_tables()
919 free(d->ContextLost); in _mesa_free_dispatch_tables()
925 if (!_mesa_alloc_dispatch_tables(ctx->API, &ctx->Dispatch, false)) in _mesa_initialize_dispatch_tables()
928 /* Do the code-generated initialization of dispatch tables. */ in _mesa_initialize_dispatch_tables()
940 ctx->GLApi = ctx->Dispatch.Current; in _mesa_initialize_dispatch_tables()
956 * miscellaneous one-time initializations. If no shared context is supplied one
980 struct gl_shared_state *shared; in _mesa_initialize_context() local
1001 ctx->API = api; in _mesa_initialize_context()
1002 ctx->DrawBuffer = NULL; in _mesa_initialize_context()
1003 ctx->ReadBuffer = NULL; in _mesa_initialize_context()
1004 ctx->WinSysDrawBuffer = NULL; in _mesa_initialize_context()
1005 ctx->WinSysReadBuffer = NULL; in _mesa_initialize_context()
1008 ctx->Visual = *visual; in _mesa_initialize_context()
1009 ctx->HasConfig = GL_TRUE; in _mesa_initialize_context()
1012 memset(&ctx->Visual, 0, sizeof ctx->Visual); in _mesa_initialize_context()
1013 ctx->HasConfig = GL_FALSE; in _mesa_initialize_context()
1018 /* misc one-time initializations */ in _mesa_initialize_context()
1023 * we'll call ctx->Driver.NewTextureObject() to create the default in _mesa_initialize_context()
1026 ctx->Driver = *driverFunctions; in _mesa_initialize_context()
1030 shared = share_list->Shared; in _mesa_initialize_context()
1034 shared = _mesa_alloc_shared_state(ctx, options); in _mesa_initialize_context()
1035 if (!shared) in _mesa_initialize_context()
1040 ctx->Const.DriverSupportedPrimMask = 0xffffffff; in _mesa_initialize_context()
1042 _mesa_reference_shared_state(ctx, &ctx->Shared, shared); in _mesa_initialize_context()
1048 ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR; in _mesa_initialize_context()
1056 memset(&ctx->TextureFormatSupported, GL_TRUE, in _mesa_initialize_context()
1057 sizeof(ctx->TextureFormatSupported)); in _mesa_initialize_context()
1059 switch (ctx->API) { in _mesa_initialize_context()
1069 for (i = 0; i < ARRAY_SIZE(ctx->Texture.FixedFuncUnit); i++) { in _mesa_initialize_context()
1071 &ctx->Texture.FixedFuncUnit[i]; in _mesa_initialize_context()
1073 texUnit->GenS.Mode = GL_REFLECTION_MAP_NV; in _mesa_initialize_context()
1074 texUnit->GenT.Mode = GL_REFLECTION_MAP_NV; in _mesa_initialize_context()
1075 texUnit->GenR.Mode = GL_REFLECTION_MAP_NV; in _mesa_initialize_context()
1076 texUnit->GenS._ModeBit = TEXGEN_REFLECTION_MAP_NV; in _mesa_initialize_context()
1077 texUnit->GenT._ModeBit = TEXGEN_REFLECTION_MAP_NV; in _mesa_initialize_context()
1078 texUnit->GenR._ModeBit = TEXGEN_REFLECTION_MAP_NV; in _mesa_initialize_context()
1082 ctx->VertexProgram.PointSizeEnabled = _mesa_is_gles2(ctx); in _mesa_initialize_context()
1083 ctx->PointSizeIsSet = GL_TRUE; in _mesa_initialize_context()
1085 ctx->FirstTimeCurrent = GL_TRUE; in _mesa_initialize_context()
1090 _mesa_reference_shared_state(ctx, &ctx->Shared, NULL); in _mesa_initialize_context()
1113 _mesa_reference_framebuffer(&ctx->WinSysDrawBuffer, NULL); in _mesa_free_context_data()
1114 _mesa_reference_framebuffer(&ctx->WinSysReadBuffer, NULL); in _mesa_free_context_data()
1115 _mesa_reference_framebuffer(&ctx->DrawBuffer, NULL); in _mesa_free_context_data()
1116 _mesa_reference_framebuffer(&ctx->ReadBuffer, NULL); in _mesa_free_context_data()
1118 _mesa_reference_program(ctx, &ctx->VertexProgram.Current, NULL); in _mesa_free_context_data()
1119 _mesa_reference_program(ctx, &ctx->VertexProgram._Current, NULL); in _mesa_free_context_data()
1120 _mesa_reference_program(ctx, &ctx->VertexProgram._TnlProgram, NULL); in _mesa_free_context_data()
1122 _mesa_reference_program(ctx, &ctx->TessCtrlProgram._Current, NULL); in _mesa_free_context_data()
1123 _mesa_reference_program(ctx, &ctx->TessEvalProgram._Current, NULL); in _mesa_free_context_data()
1124 _mesa_reference_program(ctx, &ctx->GeometryProgram._Current, NULL); in _mesa_free_context_data()
1126 _mesa_reference_program(ctx, &ctx->FragmentProgram.Current, NULL); in _mesa_free_context_data()
1127 _mesa_reference_program(ctx, &ctx->FragmentProgram._Current, NULL); in _mesa_free_context_data()
1128 _mesa_reference_program(ctx, &ctx->FragmentProgram._TexEnvProgram, NULL); in _mesa_free_context_data()
1130 _mesa_reference_program(ctx, &ctx->ComputeProgram._Current, NULL); in _mesa_free_context_data()
1132 _mesa_reference_vao(ctx, &ctx->Array.VAO, NULL); in _mesa_free_context_data()
1133 _mesa_reference_vao(ctx, &ctx->Array.DefaultVAO, NULL); in _mesa_free_context_data()
1134 _mesa_reference_vao(ctx, &ctx->Array._DrawVAO, NULL); in _mesa_free_context_data()
1154 _mesa_reference_buffer_object(ctx, &ctx->Pack.BufferObj, NULL); in _mesa_free_context_data()
1155 _mesa_reference_buffer_object(ctx, &ctx->Unpack.BufferObj, NULL); in _mesa_free_context_data()
1156 _mesa_reference_buffer_object(ctx, &ctx->DefaultPacking.BufferObj, NULL); in _mesa_free_context_data()
1157 _mesa_reference_buffer_object(ctx, &ctx->Array.ArrayBufferObj, NULL); in _mesa_free_context_data()
1165 _mesa_free_dispatch_tables(&ctx->Dispatch); in _mesa_free_context_data()
1166 free(ctx->MarshalExec); in _mesa_free_context_data()
1168 /* Shared context state (display lists, textures, etc) */ in _mesa_free_context_data()
1169 _mesa_reference_shared_state(ctx, &ctx->Shared, NULL); in _mesa_free_context_data()
1174 free((void *)ctx->Extensions.String); in _mesa_free_context_data()
1176 free(ctx->VersionString); in _mesa_free_context_data()
1178 ralloc_free(ctx->SoftFP64); in _mesa_free_context_data()
1186 if (ctx->shader_builtin_ref) { in _mesa_free_context_data()
1188 ctx->shader_builtin_ref = false; in _mesa_free_context_data()
1191 free(ctx->Const.SpirVExtensions); in _mesa_free_context_data()
1192 free(ctx->tmp_draws); in _mesa_free_context_data()
1214 dst->Accum = src->Accum; in _mesa_copy_context()
1218 dst->Color = src->Color; in _mesa_copy_context()
1222 dst->Current = src->Current; in _mesa_copy_context()
1226 dst->Depth = src->Depth; in _mesa_copy_context()
1233 dst->Eval = src->Eval; in _mesa_copy_context()
1237 dst->Fog = src->Fog; in _mesa_copy_context()
1241 dst->Hint = src->Hint; in _mesa_copy_context()
1245 dst->Light = src->Light; in _mesa_copy_context()
1249 dst->Line = src->Line; in _mesa_copy_context()
1253 dst->List = src->List; in _mesa_copy_context()
1257 dst->Pixel = src->Pixel; in _mesa_copy_context()
1261 dst->Point = src->Point; in _mesa_copy_context()
1265 dst->Polygon = src->Polygon; in _mesa_copy_context()
1273 dst->PolygonStipple[i] = src->PolygonStipple[i]; in _mesa_copy_context()
1278 dst->Scissor = src->Scissor; in _mesa_copy_context()
1282 dst->Stencil = src->Stencil; in _mesa_copy_context()
1290 dst->Transform = src->Transform; in _mesa_copy_context()
1294 for (i = 0; i < src->Const.MaxViewports; i++) { in _mesa_copy_context()
1296 dst->ViewportArray[i] = src->ViewportArray[i]; in _mesa_copy_context()
1302 dst->NewState = _NEW_ALL; in _mesa_copy_context()
1303 dst->NewDriverState = ST_ALL_STATES_MASK; in _mesa_copy_context()
1317 const struct gl_config *ctxvis = &ctx->Visual; in check_compatible()
1318 const struct gl_config *bufvis = &buffer->Visual; in check_compatible()
1324 if (ctxvis->foo && bufvis->foo && \ in check_compatible()
1325 ctxvis->foo != bufvis->foo) \ in check_compatible()
1345 * Initialize the size if the given width and height are non-zero.
1350 if (!ctx->ViewportInitialized && width > 0 && height > 0) { in check_init_viewport()
1356 ctx->ViewportInitialized = GL_TRUE; in check_init_viewport()
1358 /* Note: ctx->Const.MaxViewports may not have been set by the driver in check_init_viewport()
1372 if (ctx->Version == 0 || !ctx->DrawBuffer) { in handle_first_current()
1385 if (!ctx->HasConfig && _mesa_is_desktop_gl(ctx)) { in handle_first_current()
1386 if (ctx->DrawBuffer != _mesa_get_incomplete_framebuffer()) { in handle_first_current()
1389 if (ctx->DrawBuffer->Visual.doubleBufferMode) in handle_first_current()
1394 _mesa_drawbuffers(ctx, ctx->DrawBuffer, 1, &buffer, in handle_first_current()
1398 if (ctx->ReadBuffer != _mesa_get_incomplete_framebuffer()) { in handle_first_current()
1402 if (ctx->ReadBuffer->Visual.doubleBufferMode) { in handle_first_current()
1411 _mesa_readbuffer(ctx, ctx->ReadBuffer, buffer, bufferIndex); in handle_first_current()
1420 ctx->Const.ContextFlags & GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT; in handle_first_current()
1422 /* In OpenGL 3.1 attribute 0 becomes non-magic, just like in OpenGL ES in handle_first_current()
1424 * that will erroneously allow this usage in a 3.0 forward-compatible in handle_first_current()
1427 ctx->_AttribZeroAliasesVertex = (_mesa_is_gles1(ctx) in handle_first_current()
1468 if (newCtx && drawBuffer && newCtx->WinSysDrawBuffer != drawBuffer) { in _mesa_make_current()
1475 if (newCtx && readBuffer && newCtx->WinSysReadBuffer != readBuffer) { in _mesa_make_current()
1486 curCtx->Const.ContextReleaseBehavior == in _mesa_make_current()
1489 if (curCtx->st){ in _mesa_make_current()
1501 _mesa_reference_framebuffer(&curCtx->WinSysDrawBuffer, NULL); in _mesa_make_current()
1502 _mesa_reference_framebuffer(&curCtx->WinSysReadBuffer, NULL); in _mesa_make_current()
1510 _mesa_glapi_set_dispatch(newCtx->GLApi); in _mesa_make_current()
1515 _mesa_reference_framebuffer(&newCtx->WinSysDrawBuffer, drawBuffer); in _mesa_make_current()
1516 _mesa_reference_framebuffer(&newCtx->WinSysReadBuffer, readBuffer); in _mesa_make_current()
1520 * or not bound to a user-created FBO. in _mesa_make_current()
1522 if (!newCtx->DrawBuffer || _mesa_is_winsys_fbo(newCtx->DrawBuffer)) { in _mesa_make_current()
1523 _mesa_reference_framebuffer(&newCtx->DrawBuffer, drawBuffer); in _mesa_make_current()
1532 if (!newCtx->ReadBuffer || _mesa_is_winsys_fbo(newCtx->ReadBuffer)) { in _mesa_make_current()
1533 _mesa_reference_framebuffer(&newCtx->ReadBuffer, readBuffer); in _mesa_make_current()
1534 /* In _mesa_initialize_window_framebuffer, for single-buffered in _mesa_make_current()
1541 !newCtx->ReadBuffer->Visual.doubleBufferMode) in _mesa_make_current()
1542 if (newCtx->ReadBuffer->ColorReadBuffer == GL_FRONT) in _mesa_make_current()
1543 newCtx->ReadBuffer->ColorReadBuffer = GL_BACK; in _mesa_make_current()
1549 newCtx->NewState |= _NEW_BUFFERS; in _mesa_make_current()
1551 check_init_viewport(newCtx, drawBuffer->Width, drawBuffer->Height); in _mesa_make_current()
1554 if (newCtx->FirstTimeCurrent) { in _mesa_make_current()
1556 newCtx->FirstTimeCurrent = GL_FALSE; in _mesa_make_current()
1573 if (ctx && ctxToShare && ctx->Shared && ctxToShare->Shared) { in _mesa_share_state()
1577 _mesa_reference_shared_state(ctx, &oldShared, ctx->Shared); in _mesa_share_state()
1579 /* update ctx's Shared pointer */ in _mesa_share_state()
1580 _mesa_reference_shared_state(ctx, &ctx->Shared, ctxToShare->Shared); in _mesa_share_state()
1584 /* release the old shared state */ in _mesa_share_state()
1622 bool async = !ctx->Shared->HasExternallySharedImages; in _mesa_flush()