X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fmtypes.h;h=7046e8adfa3a52e05d45e8c0ec64b46ac9347ebb;hb=ea289d1502dc5739ec9bf69328c037b72dc02789;hp=b38d0a290095da8a042c62e936ef2558aaf7c768;hpb=e4da8b9c331cc3ae1b86b3a7860231e202463db0;p=mesa.git diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index b38d0a29009..7046e8adfa3 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -39,6 +39,7 @@ #include "c11/threads.h" #include "main/glheader.h" +#include "main/glthread.h" #include "main/menums.h" #include "main/config.h" #include "glapi/glapi.h" @@ -49,6 +50,7 @@ #include "compiler/glsl/list.h" #include "util/simple_mtx.h" #include "util/u_dynarray.h" +#include "vbo/vbo.h" #ifdef __cplusplus @@ -77,7 +79,7 @@ struct prog_instruction; struct gl_program_parameter_list; struct gl_shader_spirv_data; struct set; -struct vbo_context; +struct shader_includes; /*@}*/ @@ -103,6 +105,7 @@ _mesa_varying_slot_in_fs(gl_varying_slot slot) case VARYING_SLOT_TESS_LEVEL_INNER: case VARYING_SLOT_BOUNDING_BOX0: case VARYING_SLOT_BOUNDING_BOX1: + case VARYING_SLOT_VIEWPORT_MASK: return GL_FALSE; default: return GL_TRUE; @@ -159,19 +162,14 @@ _mesa_varying_slot_in_fs(gl_varying_slot slot) */ struct gl_config { - GLboolean rgbMode; GLboolean floatMode; GLuint doubleBufferMode; GLuint stereoMode; - GLboolean haveAccumBuffer; - GLboolean haveDepthBuffer; - GLboolean haveStencilBuffer; - GLint redBits, greenBits, blueBits, alphaBits; /* bits per comp */ GLuint redMask, greenMask, blueMask, alphaMask; + GLint redShift, greenShift, blueShift, alphaShift; GLint rgbBits; /* total bits for rgb */ - GLint indexBits; /* total bits for colorindex */ GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits; GLint depthBits; @@ -463,6 +461,7 @@ struct gl_vertex_format { GLenum16 Type; /**< datatype: GL_FLOAT, GL_INT, etc */ GLenum16 Format; /**< default: GL_RGBA, but may be GL_BGRA */ + enum pipe_format _PipeFormat:16; /**< pipe_format for Gallium */ GLubyte Size:5; /**< components per element (1,2,3,4) */ GLubyte Normalized:1; /**< GL_ARB_vertex_program */ GLubyte Integer:1; /**< Integer-valued? */ @@ -690,6 +689,9 @@ struct gl_multisample_attrib /** The GL spec defines this as an array but >32x MSAA is madness */ GLbitfield SampleMaskValue; + + /* NV_alpha_to_coverage_dither_control */ + GLenum SampleAlphaToCoverageDitherControl; }; @@ -1314,6 +1316,9 @@ struct gl_viewport_attrib GLfloat X, Y; /**< position */ GLfloat Width, Height; /**< size */ GLfloat Near, Far; /**< Depth buffer range */ + + /**< GL_NV_viewport_swizzle */ + GLenum16 SwizzleX, SwizzleY, SwizzleZ, SwizzleW; }; @@ -1534,6 +1539,14 @@ struct gl_vertex_array_object */ GLboolean EverBound; + /** + * Whether the VAO is changed by the application so often that some of + * the derived fields are not updated at all to decrease overhead. + * Also, interleaved arrays are not detected, because it's too expensive + * to do that before every draw call. + */ + bool IsDynamic; + /** * Marked to true if the object is shared between contexts and immutable. * Then reference counting is done using atomics and thread safe. @@ -1541,6 +1554,12 @@ struct gl_vertex_array_object */ bool SharedAndImmutable; + /** + * Number of updates that were done by the application. This is used to + * decide whether the VAO is static or dynamic. + */ + unsigned NumUpdates; + /** Vertex attribute arrays */ struct gl_array_attributes VertexAttrib[VERT_ATTRIB_MAX]; @@ -1550,6 +1569,9 @@ struct gl_vertex_array_object /** Mask indicating which vertex arrays have vertex buffer associated. */ GLbitfield VertexAttribBufferMask; + /** Mask indicating which vertex arrays have a non-zero instance divisor. */ + GLbitfield NonZeroDivisorMask; + /** Mask of VERT_BIT_* values indicating which arrays are enabled */ GLbitfield Enabled; @@ -1562,6 +1584,9 @@ struct gl_vertex_array_object */ GLbitfield _EffEnabledVBO; + /** Same as _EffEnabledVBO, but for instance divisors. */ + GLbitfield _EffEnabledNonZeroDivisor; + /** Denotes the way the position/generic0 attribute is mapped */ gl_attribute_map_mode _AttributeMapMode; @@ -1587,6 +1612,9 @@ struct gl_array_attrib /** The last VAO accessed by a DSA function */ struct gl_vertex_array_object *LastLookedUpVAO; + /** These contents are copied to newly created VAOs. */ + struct gl_vertex_array_object DefaultVAOState; + /** Array objects (GL_ARB_vertex_array_object) */ struct _mesa_HashTable *Objects; @@ -1605,6 +1633,7 @@ struct gl_array_attrib GLboolean PrimitiveRestartFixedIndex; GLboolean _PrimitiveRestart; GLuint RestartIndex; + GLuint _RestartIndex[4]; /**< Restart indices for index_size - 1. */ /*@}*/ /* GL_ARB_vertex_buffer_object */ @@ -2037,19 +2066,6 @@ struct gl_bindless_image }; -/** - * Current vertex processing mode: fixed function vs. shader. - * In reality, fixed function is probably implemented by a shader but that's - * not what we care about here. - */ -typedef enum -{ - VP_MODE_FF, /**< legacy / fixed function */ - VP_MODE_SHADER, /**< ARB vertex program or GLSL vertex shader */ - VP_MODE_MAX /**< for sizing arrays */ -} gl_vertex_processing_mode; - - /** * Base class for any kind of program object */ @@ -2166,6 +2182,7 @@ struct gl_program */ GLenum16 ImageAccess[MAX_IMAGE_UNIFORMS]; + GLuint NumUniformBlocks; struct gl_uniform_block **UniformBlocks; struct gl_uniform_block **ShaderStorageBlocks; @@ -2275,6 +2292,8 @@ struct gl_vertex_program_state GLboolean TwoSideEnabled; /**< GL_VERTEX_PROGRAM_TWO_SIDE_ARB/NV */ /** Should fixed-function T&L be implemented with a vertex prog? */ GLboolean _MaintainTnlProgram; + /** Whether the fixed-func program is being used right now. */ + GLboolean _UsesTnlProgram; struct gl_program *Current; /**< User-bound vertex program */ @@ -2348,6 +2367,8 @@ struct gl_fragment_program_state GLboolean Enabled; /**< User-set fragment program enable flag */ /** Should fixed-function texturing be implemented with a fragment prog? */ GLboolean _MaintainTexEnvProgram; + /** Whether the fixed-func program is being used right now. */ + GLboolean _UsesTexEnvProgram; struct gl_program *Current; /**< User-bound fragment program */ @@ -2662,6 +2683,12 @@ struct gl_shader bool bound_sampler; bool bound_image; + /** + * Whether layer output is viewport-relative. + */ + bool redeclares_gl_layer; + bool layer_viewport_relative; + /** Global xfb_stride out qualifier if any */ GLuint TransformFeedbackBufferStride[MAX_FEEDBACK_BUFFERS]; @@ -2921,6 +2948,9 @@ struct gl_shader_program_data */ union gl_constant_value *UniformDataDefaults; + /** Hash for quick search by name. */ + struct hash_table_u64 *ProgramResourceHash; + GLboolean Validated; /** List of all active resources after linking. */ @@ -3168,6 +3198,15 @@ struct gl_shader_compiler_options * gl_CullDistance together from * float[8] to vec4[2] **/ + GLbitfield LowerBuiltinVariablesXfb; /**< Which builtin variables should + * be lowered for transform feedback + **/ + + /** + * If we can lower the precision of variables based on precision + * qualifiers + */ + GLboolean LowerPrecision; /** * \name Forms of indirect addressing the driver cannot do. @@ -3198,6 +3237,9 @@ struct gl_shader_compiler_options /** Clamp UBO and SSBO block indices so they don't go out-of-bounds. */ GLboolean ClampBlockIndicesToArrayBounds; + /** (driconf) Force gl_Position to be considered invariant */ + GLboolean PositionAlwaysInvariant; + const struct nir_shader_compiler_options *NirOptions; }; @@ -3291,9 +3333,6 @@ struct gl_shared_state GLuint TextureStateStamp; /**< state notification for shared tex */ /*@}*/ - /** Default buffer object for vertex arrays that aren't in VBOs */ - struct gl_buffer_object *NullBufferObj; - /** * \name Vertex/geometry/fragment programs */ @@ -3327,6 +3366,13 @@ struct gl_shared_state struct hash_table_u64 *ImageHandles; mtx_t HandlesMutex; /**< For texture/image handles safety */ + /* GL_ARB_shading_language_include */ + struct shader_includes *ShaderIncludes; + /* glCompileShaderInclude expects ShaderIncludes not to change while it is + * in progress. + */ + mtx_t ShaderIncludeMutex; + /** * Some context in this share group was affected by a GPU reset * @@ -3822,9 +3868,14 @@ struct gl_constants GLboolean ForceGLSLAbsSqrt; /** - * Force uninitialized variables to default to zero. + * Types of variable to default initialized to zero. */ - GLboolean GLSLZeroInit; + GLuint GLSLZeroInit; + + /** + * Treat integer textures using GL_LINEAR filters as GL_NEAREST. + */ + GLboolean ForceIntegerTexNearest; /** * Does the driver support real 32-bit integers? (Otherwise, integers are @@ -3927,6 +3978,11 @@ struct gl_constants */ bool GLSLOptimizeConservatively; + /** + * Whether to call lower_const_arrays_to_uniforms() during linking. + */ + bool GLSLLowerConstArrays; + /** * True if gl_TessLevelInner/Outer[] in the TES should be inputs * (otherwise, they're system values). @@ -3953,6 +4009,15 @@ struct gl_constants */ GLboolean DisableVaryingPacking; + /** + * Disable varying packing if used for transform feedback. This is needed + * for some drivers (e.g. Panfrost) where transform feedback requires + * unpacked varyings. + * + * This variable is mutually exlusive with DisableVaryingPacking. + */ + GLboolean DisableTransformFeedbackPacking; + /** * UBOs and SSBOs can be packed tightly by the OpenGL implementation when * layout is set as shared (the default) or packed. However most Mesa drivers @@ -4012,51 +4077,6 @@ struct gl_constants } SupportedMultisampleModes[40]; GLint NumSupportedMultisampleModes; - /** - * GL_EXT_texture_multisample_blit_scaled implementation assumes that - * samples are laid out in a rectangular grid roughly corresponding to - * sample locations within a pixel. Below SampleMap{2,4,8}x variables - * are used to map indices of rectangular grid to sample numbers within - * a pixel. This mapping of indices to sample numbers must be initialized - * by the driver for the target hardware. For example, if we have the 8X - * MSAA sample number layout (sample positions) for XYZ hardware: - * - * sample indices layout sample number layout - * --------- --------- - * | 0 | 1 | | a | b | - * --------- --------- - * | 2 | 3 | | c | d | - * --------- --------- - * | 4 | 5 | | e | f | - * --------- --------- - * | 6 | 7 | | g | h | - * --------- --------- - * - * Where a,b,c,d,e,f,g,h are integers between [0-7]. - * - * Then, initialize the SampleMap8x variable for XYZ hardware as shown - * below: - * SampleMap8x = {a, b, c, d, e, f, g, h}; - * - * Follow the logic for sample counts 2-8. - * - * For 16x the sample indices layout as a 4x4 grid as follows: - * - * ----------------- - * | 0 | 1 | 2 | 3 | - * ----------------- - * | 4 | 5 | 6 | 7 | - * ----------------- - * | 8 | 9 |10 |11 | - * ----------------- - * |12 |13 |14 |15 | - * ----------------- - */ - uint8_t SampleMap2x[2]; - uint8_t SampleMap4x[4]; - uint8_t SampleMap8x[8]; - uint8_t SampleMap16x[16]; - /** GL_ARB_shader_atomic_counters */ GLuint MaxAtomicBufferBindings; GLuint MaxAtomicBufferSize; @@ -4117,6 +4137,12 @@ struct gl_constants /** When drivers are OK with mapped buffers during draw and other calls. */ bool AllowMappedBuffersDuringExecution; + /** + * Whether buffer creation, unsynchronized mapping, unmapping, and + * deletion is thread-safe. + */ + bool BufferCreateMapUnsynchronizedThreadSafe; + /** GL_ARB_get_program_binary */ GLuint NumProgramBinaryFormats; @@ -4130,6 +4156,24 @@ struct gl_constants /** Is the drivers uniform storage packed or padded to 16 bytes. */ bool PackedDriverUniformStorage; + /** Does the driver make use of the NIR based GLSL linker */ + bool UseNIRGLSLLinker; + + /** Wether or not glBitmap uses red textures rather than alpha */ + bool BitmapUsesRed; + + /** Whether the vertex buffer offset is a signed 32-bit integer. */ + bool VertexBufferOffsetIsInt32; + + /** Whether the driver can handle MultiDrawElements with non-VBO indices. */ + bool MultiDrawWithUserIndices; + + /** Whether out-of-order draw (Begin/End) optimizations are allowed. */ + bool AllowDrawOutOfOrder; + + /** Whether to allow the fast path for frequently updated VAOs. */ + bool AllowDynamicVAOFastPath; + /** GL_ARB_gl_spirv */ struct spirv_supported_capabilities SpirVCapabilities; @@ -4137,6 +4181,9 @@ struct gl_constants struct spirv_supported_extensions *SpirVExtensions; char *VendorOverride; + + /** Buffer size used to upload vertices from glBegin/glEnd. */ + unsigned glBeginEndBufferSize; }; @@ -4271,9 +4318,11 @@ struct gl_extensions GLboolean EXT_blend_equation_separate; GLboolean EXT_blend_func_separate; GLboolean EXT_blend_minmax; + GLboolean EXT_demote_to_helper_invocation; GLboolean EXT_depth_bounds_test; GLboolean EXT_disjoint_timer_query; GLboolean EXT_draw_buffers2; + GLboolean EXT_EGL_image_storage; GLboolean EXT_float_blend; GLboolean EXT_framebuffer_multisample; GLboolean EXT_framebuffer_multisample_blit_scaled; @@ -4305,6 +4354,7 @@ struct gl_extensions GLboolean EXT_texture_filter_anisotropic; GLboolean EXT_texture_integer; GLboolean EXT_texture_mirror_clamp; + GLboolean EXT_texture_norm16; GLboolean EXT_texture_shadow_lod; GLboolean EXT_texture_shared_exponent; GLboolean EXT_texture_snorm; @@ -4342,9 +4392,11 @@ struct gl_extensions GLboolean ATI_texture_env_combine3; GLboolean ATI_fragment_shader; GLboolean GREMEDY_string_marker; + GLboolean INTEL_blackhole_render; GLboolean INTEL_conservative_rasterization; GLboolean INTEL_performance_query; GLboolean INTEL_shader_atomic_float_minmax; + GLboolean INTEL_shader_integer_functions2; GLboolean KHR_blend_equation_advanced; GLboolean KHR_blend_equation_advanced_coherent; GLboolean KHR_robustness; @@ -4358,8 +4410,10 @@ struct gl_extensions GLboolean EXT_shader_framebuffer_fetch_non_coherent; GLboolean MESA_shader_integer_functions; GLboolean MESA_ycbcr_texture; + GLboolean NV_alpha_to_coverage_dither_control; GLboolean NV_compute_shader_derivatives; GLboolean NV_conditional_render; + GLboolean NV_copy_image; GLboolean NV_fill_rectangle; GLboolean NV_fog_distance; GLboolean NV_point_sprite; @@ -4373,6 +4427,8 @@ struct gl_extensions GLboolean NV_conservative_raster_dilate; GLboolean NV_conservative_raster_pre_snap_triangles; GLboolean NV_conservative_raster_pre_snap; + GLboolean NV_viewport_array2; + GLboolean NV_viewport_swizzle; GLboolean NVX_gpu_memory_info; GLboolean TDFX_texture_compression_FXT1; GLboolean OES_EGL_image; @@ -4397,12 +4453,6 @@ struct gl_extensions * while meta is in progress. */ GLubyte Version; - /** - * Force-enabled, yet unrecognized, extensions. - * See _mesa_one_time_init_extension_overrides() - */ -#define MAX_UNRECOGNIZED_EXTENSIONS 16 - const char *unrecognized_extensions[MAX_UNRECOGNIZED_EXTENSIONS]; }; @@ -4446,7 +4496,7 @@ struct gl_matrix_stack #define _NEW_TEXTURE_MATRIX (1u << 2) /**< gl_context::TextureMatrix */ #define _NEW_COLOR (1u << 3) /**< gl_context::Color */ #define _NEW_DEPTH (1u << 4) /**< gl_context::Depth */ -#define _NEW_EVAL (1u << 5) /**< gl_context::Eval, EvalMap */ +/* gap */ #define _NEW_FOG (1u << 6) /**< gl_context::Fog */ #define _NEW_HINT (1u << 7) /**< gl_context::Hint */ #define _NEW_LIGHT (1u << 8) /**< gl_context::Light */ @@ -4533,7 +4583,7 @@ struct gl_dlist_state GLvertexformat ListVtxfmt; GLubyte ActiveAttribSize[VERT_ATTRIB_MAX]; - GLfloat CurrentAttrib[VERT_ATTRIB_MAX][8]; + uint32_t CurrentAttrib[VERT_ATTRIB_MAX][8]; GLubyte ActiveMaterialSize[MAT_ATTRIB_MAX]; GLfloat CurrentMaterial[MAT_ATTRIB_MAX][4]; @@ -4671,6 +4721,9 @@ struct gl_driver_flags /** gl_context::Transform::ClipPlanesEnabled */ uint64_t NewClipPlaneEnable; + /** gl_context::Color::ClampFragmentColor */ + uint64_t NewFragClamp; + /** gl_context::Transform::DepthClamp */ uint64_t NewDepthClamp; @@ -4794,6 +4847,31 @@ struct gl_semaphore_object GLuint Name; /**< hash table ID/name */ }; +/** + * One element of the client attrib stack. + */ +struct gl_client_attrib_node +{ + GLbitfield Mask; + struct gl_array_attrib Array; + struct gl_vertex_array_object VAO; + struct gl_pixelstore_attrib Pack; + struct gl_pixelstore_attrib Unpack; +}; + +/** + * The VBO module implemented in src/vbo. + */ +struct vbo_context { + struct gl_vertex_buffer_binding binding; + struct gl_array_attributes current[VBO_ATTRIB_MAX]; + + struct gl_vertex_array_object *VAO; + + struct vbo_exec_context exec; + struct vbo_save_context save; +}; + /** * Mesa rendering context. * @@ -4853,7 +4931,7 @@ struct gl_context /*@}*/ - struct glthread_state *GLThread; + struct glthread_state GLThread; struct gl_config Visual; struct gl_framebuffer *DrawBuffer; /**< buffer for writing */ @@ -4932,7 +5010,7 @@ struct gl_context /** \name Client attribute stack */ /*@{*/ GLuint ClientAttribStackDepth; - struct gl_attrib_node *ClientAttribStack[MAX_CLIENT_ATTRIB_STACK_DEPTH]; + struct gl_client_attrib_node ClientAttribStack[MAX_CLIENT_ATTRIB_STACK_DEPTH]; /*@}*/ /** \name Client attribute groups */ @@ -5083,6 +5161,7 @@ struct gl_context struct gl_driver_flags DriverFlags; GLboolean ViewportInitialized; /**< has viewport size been initialized? */ + GLboolean _AllowDrawOutOfOrder; GLbitfield varying_vp_inputs; /**< mask of VERT_BIT_* flags */ @@ -5117,6 +5196,8 @@ struct gl_context GLfloat ConservativeRasterDilate; GLenum16 ConservativeRasterMode; + GLboolean IntelBlackholeRender; /**< GL_INTEL_blackhole_render */ + /** Does glVertexAttrib(0) alias glVertex()? */ bool _AttribZeroAliasesVertex; @@ -5138,7 +5219,7 @@ struct gl_context void *swrast_context; void *swsetup_context; void *swtnl_context; - struct vbo_context *vbo_context; + struct vbo_context vbo_context; struct st_context *st; /*@}*/