X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fmtypes.h;h=6f9c74bdfb03038263f44e156cefb8646d328bd3;hb=3c5ddaeacd2c52bc11f9cda451fe640cff629bdd;hp=2c87308dd735230f19f10c65c19f6d1101ca41be;hpb=4560aad780b851f855a8adc72ea34ca4eb17634a;p=mesa.git diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 2c87308dd73..6f9c74bdfb0 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -213,6 +213,9 @@ struct gl_config /* EXT_framebuffer_sRGB */ GLint sRGBCapable; + + /* EGL_KHR_mutable_render_buffer */ + GLuint mutableRenderBuffer; /* bool */ }; @@ -453,6 +456,21 @@ struct gl_colorbuffer_attrib }; +/** + * Vertex format to describe a vertex element. + */ +struct gl_vertex_format +{ + GLenum16 Type; /**< datatype: GL_FLOAT, GL_INT, etc */ + GLenum16 Format; /**< default: GL_RGBA, but may be GL_BGRA */ + GLubyte Size:5; /**< components per element (1,2,3,4) */ + GLubyte Normalized:1; /**< GL_ARB_vertex_program */ + GLubyte Integer:1; /**< Integer-valued? */ + GLubyte Doubles:1; /**< double values are not converted to floats */ + GLubyte _ElementSize; /**< Size of each element in bytes */ +}; + + /** * Current attribute group (GL_CURRENT_BIT). */ @@ -585,6 +603,7 @@ struct gl_hint_attrib GLenum16 TextureCompression; /**< GL_ARB_texture_compression */ GLenum16 GenerateMipmap; /**< GL_SGIS_generate_mipmap */ GLenum16 FragmentShaderDerivative; /**< GL_ARB_fragment_shader */ + GLuint MaxShaderCompilerThreads; /**< GL_ARB_parallel_shader_compile */ }; @@ -1279,7 +1298,8 @@ struct gl_transform_attrib GLboolean Normalize; /**< Normalize all normals? */ GLboolean RescaleNormals; /**< GL_EXT_rescale_normal */ GLboolean RasterPositionUnclipped; /**< GL_IBM_rasterpos_clip */ - GLboolean DepthClamp; /**< GL_ARB_depth_clamp */ + GLboolean DepthClampNear; /**< GL_AMD_depth_clamp_separate */ + GLboolean DepthClampFar; /**< GL_AMD_depth_clamp_separate */ /** GL_ARB_clip_control */ GLenum16 ClipOrigin; /**< GL_LOWER_LEFT or GL_UPPER_LEFT */ GLenum16 ClipDepthMode;/**< GL_NEGATIVE_ONE_TO_ONE or GL_ZERO_TO_ONE */ @@ -1320,7 +1340,9 @@ typedef enum USAGE_SHADER_STORAGE_BUFFER = 0x8, USAGE_TRANSFORM_FEEDBACK_BUFFER = 0x10, USAGE_PIXEL_PACK_BUFFER = 0x20, - USAGE_DISABLE_MINMAX_CACHE = 0x40, + USAGE_ARRAY_BUFFER = 0x40, + USAGE_ELEMENT_ARRAY_BUFFER = 0x80, + USAGE_DISABLE_MINMAX_CACHE = 0x100, } gl_buffer_usage; @@ -1415,17 +1437,38 @@ struct gl_array_attributes const GLubyte *Ptr; /** Offset of the first element relative to the binding offset */ GLuint RelativeOffset; - GLshort Stride; /**< Stride as specified with gl*Pointer() */ - GLenum16 Type; /**< Datatype: GL_FLOAT, GL_INT, etc */ - GLenum16 Format; /**< Default: GL_RGBA, but may be GL_BGRA */ - GLboolean Enabled; /**< Whether the array is enabled */ - GLubyte Size; /**< Components per element (1,2,3,4) */ - unsigned Normalized:1; /**< Fixed-point values are normalized when converted to floats */ - unsigned Integer:1; /**< Fixed-point values are not converted to floats */ - unsigned Doubles:1; /**< double precision values are not converted to floats */ - unsigned _ElementSize:8; /**< Size of each element in bytes */ + /** Vertex format */ + struct gl_vertex_format Format; + /** Stride as specified with gl*Pointer() */ + GLshort Stride; /** Index into gl_vertex_array_object::BufferBinding[] array */ - unsigned BufferBindingIndex:6; + GLubyte BufferBindingIndex; + + /** + * Derived effective buffer binding index + * + * Index into the gl_vertex_buffer_binding array of the vao. + * Similar to BufferBindingIndex, but with the mapping of the + * position/generic0 attributes applied and with identical + * gl_vertex_buffer_binding entries collapsed to a single + * entry within the vao. + * + * The value is valid past calling _mesa_update_vao_derived_arrays. + * Note that _mesa_update_vao_derived_arrays is called when binding + * the VAO to Array._DrawVAO. + */ + GLubyte _EffBufferBindingIndex; + /** + * Derived effective relative offset. + * + * Relative offset to the effective buffers offset in + * gl_vertex_buffer_binding::_EffOffset. + * + * The value is valid past calling _mesa_update_vao_derived_arrays. + * Note that _mesa_update_vao_derived_arrays is called when binding + * the VAO to Array._DrawVAO. + */ + GLushort _EffRelativeOffset; }; @@ -1441,20 +1484,35 @@ struct gl_vertex_buffer_binding GLuint InstanceDivisor; /**< GL_ARB_instanced_arrays */ struct gl_buffer_object *BufferObj; /**< GL_ARB_vertex_buffer_object */ GLbitfield _BoundArrays; /**< Arrays bound to this binding point */ -}; - -/** - * Vertex array information which is derived from gl_array_attributes - * and gl_vertex_buffer_binding information. Used by the VBO module and - * device drivers. - */ -struct gl_vertex_array -{ - /** Vertex attribute array */ - const struct gl_array_attributes *VertexAttrib; - /** Vertex buffer binding */ - const struct gl_vertex_buffer_binding *BufferBinding; + /** + * Derived effective bound arrays. + * + * The effective binding handles enabled arrays past the + * position/generic0 attribute mapping and reduces the refered + * gl_vertex_buffer_binding entries to a unique subset. + * + * The value is valid past calling _mesa_update_vao_derived_arrays. + * Note that _mesa_update_vao_derived_arrays is called when binding + * the VAO to Array._DrawVAO. + */ + GLbitfield _EffBoundArrays; + /** + * Derived offset. + * + * The absolute offset to that we can collapse some attributes + * to this unique effective binding. + * For user space array bindings this contains the smallest pointer value + * in the bound and interleaved arrays. + * For VBO bindings this contains an offset that lets the attributes + * _EffRelativeOffset stay positive and in bounds with + * Const.MaxVertexAttribRelativeOffset + * + * The value is valid past calling _mesa_update_vao_derived_arrays. + * Note that _mesa_update_vao_derived_arrays is called when binding + * the VAO to Array._DrawVAO. + */ + GLintptr _EffOffset; }; @@ -1493,7 +1551,16 @@ struct gl_vertex_array_object GLbitfield VertexAttribBufferMask; /** Mask of VERT_BIT_* values indicating which arrays are enabled */ - GLbitfield _Enabled; + GLbitfield Enabled; + + /** + * Mask of VERT_BIT_* enabled arrays past position/generic0 mapping + * + * The value is valid past calling _mesa_update_vao_derived_arrays. + * Note that _mesa_update_vao_derived_arrays is called when binding + * the VAO to Array._DrawVAO. + */ + GLbitfield _EffEnabledVBO; /** Denotes the way the position/generic0 attribute is mapped */ gl_attribute_map_mode _AttributeMapMode; @@ -1565,12 +1632,6 @@ struct gl_array_attrib */ struct gl_vertex_array_object *_EmptyVAO; - /** - * Vertex arrays as consumed by a driver. - * The array pointer is set up only by the VBO module. - */ - const struct gl_vertex_array *_DrawArrays; /**< 0..VERT_ATTRIB_MAX-1 */ - /** Legal array datatypes and the API for which they have been computed */ GLbitfield LegalTypesMask; gl_api LegalTypesMaskAPI; @@ -1966,7 +2027,9 @@ struct gl_bindless_image /** Whether this bindless image is bound to a unit. */ GLboolean bound; - /** Access qualifier (GL_READ_WRITE, GL_READ_ONLY, GL_WRITE_ONLY) */ + /** Access qualifier (GL_READ_WRITE, GL_READ_ONLY, GL_WRITE_ONLY, or + * GL_NONE to indicate both read-only and write-only) + */ GLenum16 access; /** Pointer to the base of the data. */ @@ -2016,6 +2079,21 @@ struct gl_program /** Is this program written to on disk shader cache */ bool program_written_to_cache; + /** A bitfield indicating which vertex shader inputs consume two slots + * + * This is used for mapping from single-slot input locations in the GL API + * to dual-slot double input locations in the shader. This field is set + * once as part of linking and never updated again to ensure the mapping + * remains consistent. + * + * Note: There may be dual-slot variables in the original shader source + * which do not appear in this bitfield due to having been eliminated by + * the compiler prior to DualSlotInputs being calculated. There may also + * be bits set in this bitfield which are set but which the shader never + * reads due to compiler optimizations eliminating such variables after + * DualSlotInputs is calculated. + */ + GLbitfield64 DualSlotInputs; /** Subset of OutputsWritten outputs written with non-zero index. */ GLbitfield64 SecondaryOutputsWritten; /** TEXTURE_x_BIT bitmask */ @@ -2027,10 +2105,6 @@ struct gl_program /** Texture units used for samplerExternalOES */ GLbitfield ExternalSamplersUsed; - /* Fragement shader only fields */ - GLboolean OriginUpperLeft; - GLboolean PixelCenterInteger; - /** Named parameters, constants, etc. from program text */ struct gl_program_parameter_list *Parameters; @@ -2083,8 +2157,9 @@ struct gl_program /** * Access qualifier specified in the shader for each image uniform - * index. Either \c GL_READ_ONLY, \c GL_WRITE_ONLY or \c - * GL_READ_WRITE. + * index. Either \c GL_READ_ONLY, \c GL_WRITE_ONLY, \c + * GL_READ_WRITE, or \c GL_NONE to indicate both read-only and + * write-only. * * It may be different, though only more strict than the value of * \c gl_image_unit::Access for the corresponding image unit. @@ -2094,6 +2169,11 @@ struct gl_program struct gl_uniform_block **UniformBlocks; struct gl_uniform_block **ShaderStorageBlocks; + /** + * Bitmask of shader storage blocks not declared as read-only. + */ + unsigned ShaderStorageBlocksWriteAccess; + /** Which texture target is being sampled * (TEXTURE_1D/2D/3D/etc_INDEX) */ @@ -2404,7 +2484,7 @@ struct gl_shader_info GLint VerticesOut; /** * 0 - Invocations count not declared in shader, or - * 1 .. MAX_GEOMETRY_SHADER_INVOCATIONS + * 1 .. Const.MaxGeometryShaderInvocations */ GLint Invocations; /** @@ -2436,6 +2516,12 @@ struct gl_shader_info * ARB_compute_variable_group_size. */ bool LocalSizeVariable; + + /* + * Arrangement of invocations used to calculate derivatives in a compute + * shader. From NV_compute_shader_derivatives. + */ + enum gl_derivative_group DerivativeGroup; } Comp; }; @@ -2500,8 +2586,7 @@ enum gl_compile_status { COMPILE_FAILURE = 0, COMPILE_SUCCESS, - COMPILE_SKIPPED, - COMPILED_NO_OPTS + COMPILE_SKIPPED }; /** @@ -2555,6 +2640,10 @@ struct gl_shader bool uses_gl_fragcoord; bool PostDepthCoverage; + bool PixelInterlockOrdered; + bool PixelInterlockUnordered; + bool SampleInterlockOrdered; + bool SampleInterlockUnordered; bool InnerCoverage; /** @@ -2845,6 +2934,12 @@ struct gl_shader_program_data /* Mask of stages this program was linked against */ unsigned linked_stages; + + /* Whether the shaders of this program are loaded from SPIR-V binaries + * (all have the SPIR_V_BINARY_ARB state). This was introduced by the + * ARB_gl_spirv extension. + */ + bool spirv; }; /** @@ -3282,6 +3377,7 @@ struct gl_renderbuffer */ GLboolean NeedsFinishRenderTexture; GLubyte NumSamples; /**< zero means not multisampled */ + GLubyte NumStorageSamples; /**< for AMD_framebuffer_multisample_advanced */ GLenum16 InternalFormat; /**< The user-specified format */ GLenum16 _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or GL_STENCIL_INDEX. */ @@ -3327,6 +3423,7 @@ struct gl_renderbuffer_attachment */ struct gl_texture_object *Texture; GLuint TextureLevel; /**< Attached mipmap level. */ + GLsizei NumSamples; /**< from FramebufferTexture2DMultisampleEXT */ GLuint CubeMapFace; /**< 0 .. 5, for cube map textures. */ GLuint Zoffset; /**< Slice for 3D textures, or layer for both 1D * and 2D array textures */ @@ -3418,6 +3515,8 @@ struct gl_framebuffer bool _HasAttachments; GLbitfield _IntegerBuffers; /**< Which color buffers are integer valued */ + GLbitfield _RGBBuffers; /**< Which color buffers have baseformat == RGB */ + GLbitfield _FP32Buffers; /**< Which color buffers are FP32 */ /* ARB_color_buffer_float */ GLboolean _AllColorBuffersFixedPoint; /* no integer, no float */ @@ -3441,6 +3540,11 @@ struct gl_framebuffer GLenum16 ColorDrawBuffer[MAX_DRAW_BUFFERS]; GLenum16 ColorReadBuffer; + /* GL_ARB_sample_locations */ + GLfloat *SampleLocationTable; /**< If NULL, no table has been specified */ + GLboolean ProgrammableSampleLocations; + GLboolean SampleLocationPixelGrid; + /** Computed from ColorDraw/ReadBuffer above */ GLuint _NumColorDrawBuffers; gl_buffer_index _ColorDrawBufferIndexes[MAX_DRAW_BUFFERS]; @@ -3448,6 +3552,9 @@ struct gl_framebuffer struct gl_renderbuffer *_ColorDrawBuffers[MAX_DRAW_BUFFERS]; struct gl_renderbuffer *_ColorReadBuffer; + /* GL_MESA_framebuffer_flip_y */ + bool FlipY; + /** Delete this framebuffer */ void (*Delete)(struct gl_framebuffer *fb); }; @@ -3521,7 +3628,7 @@ struct gl_program_constants struct gl_precision LowInt, MediumInt, HighInt; /* GL_ARB_uniform_buffer_object */ GLuint MaxUniformBlocks; - GLuint MaxCombinedUniformComponents; + uint64_t MaxCombinedUniformComponents; GLuint MaxTextureImageUnits; /* GL_ARB_shader_atomic_counters */ @@ -3647,6 +3754,7 @@ struct gl_constants /** geometry shader */ GLuint MaxGeometryOutputVertices; GLuint MaxGeometryTotalOutputComponents; + GLuint MaxGeometryShaderInvocations; GLuint GLSLVersion; /**< Desktop GLSL version supported (ex: 120 = 1.20) */ GLuint GLSLVersionCompat; /**< Desktop compat GLSL version supported */ @@ -3668,6 +3776,18 @@ struct gl_constants */ GLboolean AllowGLSLExtensionDirectiveMidShader; + /** + * Allow builtins as part of constant expressions. This was not allowed + * until GLSL 1.20 this allows it everywhere. + */ + GLboolean AllowGLSLBuiltinConstantExpression; + + /** + * Allow some relaxation of GLSL ES shader restrictions. This encompasses + * a number of relaxations to the ES shader rules. + */ + GLboolean AllowGLSLRelaxedES; + /** * Allow GLSL built-in variables to be redeclared verbatim */ @@ -3685,6 +3805,11 @@ struct gl_constants */ GLboolean AllowHigherCompatVersion; + /** + * Allow layout qualifiers on function parameters. + */ + GLboolean AllowLayoutQualifiersOnFunctionParameters; + /** * Force computing the absolute value for sqrt() and inversesqrt() to follow * D3D9 when apps rely on this behaviour. @@ -3863,6 +3988,21 @@ struct gl_constants GLint MaxDepthTextureSamples; GLint MaxIntegerSamples; + /** GL_AMD_framebuffer_multisample_advanced */ + GLint MaxColorFramebufferSamples; + GLint MaxColorFramebufferStorageSamples; + GLint MaxDepthStencilFramebufferSamples; + + /* An array of supported MSAA modes allowing different sample + * counts per attachment type. + */ + struct { + GLint NumColorSamples; + GLint NumColorStorageSamples; + GLint NumDepthStencilSamples; + } SupportedMultisampleModes[40]; + GLint NumSupportedMultisampleModes; + /** * GL_EXT_texture_multisample_blit_scaled implementation assumes that * samples are laid out in a rectangular grid roughly corresponding to @@ -4030,6 +4170,7 @@ struct gl_extensions GLboolean ARB_fragment_shader; GLboolean ARB_framebuffer_no_attachments; GLboolean ARB_framebuffer_object; + GLboolean ARB_fragment_shader_interlock; GLboolean ARB_enhanced_layouts; GLboolean ARB_explicit_attrib_location; GLboolean ARB_explicit_uniform_location; @@ -4051,6 +4192,7 @@ struct gl_extensions GLboolean ARB_post_depth_coverage; GLboolean ARB_query_buffer_object; GLboolean ARB_robust_buffer_access_behavior; + GLboolean ARB_sample_locations; GLboolean ARB_sample_shading; GLboolean ARB_seamless_cube_map; GLboolean ARB_shader_atomic_counter_ops; @@ -4117,6 +4259,7 @@ struct gl_extensions GLboolean EXT_depth_bounds_test; GLboolean EXT_disjoint_timer_query; GLboolean EXT_draw_buffers2; + GLboolean EXT_float_blend; GLboolean EXT_framebuffer_multisample; GLboolean EXT_framebuffer_multisample_blit_scaled; GLboolean EXT_framebuffer_sRGB; @@ -4124,18 +4267,22 @@ struct gl_extensions GLboolean EXT_gpu_shader4; GLboolean EXT_memory_object; GLboolean EXT_memory_object_fd; + GLboolean EXT_multisampled_render_to_texture; GLboolean EXT_packed_float; GLboolean EXT_pixel_buffer_object; GLboolean EXT_point_parameters; GLboolean EXT_provoking_vertex; + GLboolean EXT_render_snorm; GLboolean EXT_semaphore; GLboolean EXT_semaphore_fd; GLboolean EXT_shader_integer_mix; GLboolean EXT_shader_samples_identical; + GLboolean EXT_sRGB; GLboolean EXT_stencil_two_side; GLboolean EXT_texture_array; GLboolean EXT_texture_compression_latc; GLboolean EXT_texture_compression_s3tc; + GLboolean EXT_texture_compression_s3tc_srgb; GLboolean EXT_texture_env_dot3; GLboolean EXT_texture_filter_anisotropic; GLboolean EXT_texture_integer; @@ -4143,6 +4290,7 @@ struct gl_extensions GLboolean EXT_texture_shared_exponent; GLboolean EXT_texture_snorm; GLboolean EXT_texture_sRGB; + GLboolean EXT_texture_sRGB_R8; GLboolean EXT_texture_sRGB_decode; GLboolean EXT_texture_swizzle; GLboolean EXT_texture_type_2_10_10_10_REV; @@ -4156,8 +4304,11 @@ struct gl_extensions GLboolean OES_standard_derivatives; GLboolean OES_texture_buffer; GLboolean OES_texture_cube_map_array; + GLboolean OES_texture_view; GLboolean OES_viewport_array; /* vendor extensions */ + GLboolean AMD_framebuffer_multisample_advanced; + GLboolean AMD_depth_clamp_separate; GLboolean AMD_performance_monitor; GLboolean AMD_pinned_memory; GLboolean AMD_seamless_cubemap_per_texture; @@ -4170,27 +4321,30 @@ struct gl_extensions GLboolean ATI_texture_mirror_once; GLboolean ATI_texture_env_combine3; GLboolean ATI_fragment_shader; - GLboolean ATI_separate_stencil; GLboolean GREMEDY_string_marker; GLboolean INTEL_conservative_rasterization; GLboolean INTEL_performance_query; + GLboolean INTEL_shader_atomic_float_minmax; GLboolean KHR_blend_equation_advanced; GLboolean KHR_blend_equation_advanced_coherent; GLboolean KHR_robustness; GLboolean KHR_texture_compression_astc_hdr; GLboolean KHR_texture_compression_astc_ldr; GLboolean KHR_texture_compression_astc_sliced_3d; + GLboolean MESA_framebuffer_flip_y; GLboolean MESA_tile_raster_order; GLboolean MESA_pack_invert; GLboolean EXT_shader_framebuffer_fetch; GLboolean EXT_shader_framebuffer_fetch_non_coherent; GLboolean MESA_shader_integer_functions; GLboolean MESA_ycbcr_texture; + GLboolean NV_compute_shader_derivatives; GLboolean NV_conditional_render; GLboolean NV_fill_rectangle; GLboolean NV_fog_distance; GLboolean NV_point_sprite; GLboolean NV_primitive_restart; + GLboolean NV_shader_atomic_float; GLboolean NV_texture_barrier; GLboolean NV_texture_env_combine4; GLboolean NV_texture_rectangle; @@ -4359,7 +4513,7 @@ struct gl_dlist_state GLvertexformat ListVtxfmt; GLubyte ActiveAttribSize[VERT_ATTRIB_MAX]; - GLfloat CurrentAttrib[VERT_ATTRIB_MAX][4]; + GLfloat CurrentAttrib[VERT_ATTRIB_MAX][8]; GLubyte ActiveMaterialSize[MAT_ATTRIB_MAX]; GLfloat CurrentMaterial[MAT_ATTRIB_MAX][4]; @@ -4514,6 +4668,9 @@ struct gl_driver_flags /** Shader constants (uniforms, program parameters, state constants) */ uint64_t NewShaderConstants[MESA_SHADER_STAGES]; + + /** Programmable sample location state for gl_context::DrawBuffer */ + uint64_t NewSampleLocations; }; struct gl_buffer_binding