X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fmtypes.h;h=edefd784a64c3359d87b1bf91322e296a110cae4;hb=68a0e15f44cf351eab97a734b1cffeade1873fdf;hp=dadedb145adda219780022ff5848f8ca2c71ae07;hpb=a46bd79ee195d699b020a8dde3fda6eab4ece0d4;p=mesa.git diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index dadedb145ad..edefd784a64 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -47,6 +47,7 @@ #include "main/formats.h" /* MESA_FORMAT_COUNT */ #include "compiler/glsl/list.h" #include "util/bitscan.h" +#include "util/u_dynarray.h" #ifdef __cplusplus @@ -144,7 +145,8 @@ typedef enum BUFFER_COLOR5, BUFFER_COLOR6, BUFFER_COLOR7, - BUFFER_COUNT + BUFFER_COUNT, + BUFFER_NONE = -1, } gl_buffer_index; /** @@ -187,6 +189,9 @@ typedef enum BUFFER_BIT_COLOR6 | \ BUFFER_BIT_COLOR7) +/* Mask of bits for depth+stencil buffers */ +#define BUFFER_BITS_DEPTH_STENCIL (BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL) + /** * Framebuffer configuration (aka visual / pixelformat) * Note: some of these fields should be boolean, but it appears that @@ -574,6 +579,18 @@ struct gl_eval_attrib }; +/** + * Compressed fog mode. + */ +enum gl_fog_mode +{ + FOG_NONE, + FOG_LINEAR, + FOG_EXP, + FOG_EXP2, +}; + + /** * Fog attribute group (GL_FOG_BIT). */ @@ -581,6 +598,8 @@ struct gl_fog_attrib { GLboolean Enabled; /**< Fog enabled flag */ GLboolean ColorSumEnabled; + uint8_t _PackedMode; /**< Fog mode as 2 bits */ + uint8_t _PackedEnabledMode; /**< Masked CompressedMode */ GLfloat ColorUnclamped[4]; /**< Fog color */ GLfloat Color[4]; /**< Fog color */ GLfloat Density; /**< Density >= 0.0 */ @@ -690,8 +709,8 @@ struct gl_multisample_attrib /* ARB_texture_multisample / GL3.2 additions */ GLboolean SampleMask; - GLfloat SampleCoverageValue; - GLfloat MinSampleShadingValue; + GLfloat SampleCoverageValue; /**< In range [0, 1] */ + GLfloat MinSampleShadingValue; /**< In range [0, 1] */ /** The GL spec defines this as an array but >32x MSAA is madness */ GLbitfield SampleMaskValue; @@ -784,7 +803,6 @@ struct gl_polygon_attrib GLenum FrontFace; /**< Either GL_CW or GL_CCW */ GLenum FrontMode; /**< Either GL_POINT, GL_LINE or GL_FILL */ GLenum BackMode; /**< Either GL_POINT, GL_LINE or GL_FILL */ - GLboolean _FrontBit; /**< 0=GL_CCW, 1=GL_CW */ GLboolean CullFlag; /**< Culling on/off flag */ GLboolean SmoothFlag; /**< True if GL_POLYGON_SMOOTH is enabled */ GLboolean StippleFlag; /**< True if GL_POLYGON_STIPPLE is enabled */ @@ -837,9 +855,6 @@ struct gl_stencil_attrib GLboolean Enabled; /**< Enabled flag */ GLboolean TestTwoSide; /**< GL_EXT_stencil_two_side */ GLubyte ActiveFace; /**< GL_EXT_stencil_two_side (0 or 2) */ - GLboolean _Enabled; /**< Enabled and stencil buffer present */ - GLboolean _WriteEnabled; /**< _Enabled and non-zero writemasks */ - GLboolean _TestTwoSide; GLubyte _BackFace; /**< Current back stencil state (1 or 2) */ GLenum Function[3]; /**< Stencil function */ GLenum FailFunc[3]; /**< Fail function */ @@ -973,6 +988,10 @@ struct gl_sampler_object GLenum CompareFunc; /**< GL_ARB_shadow */ GLenum sRGBDecode; /**< GL_DECODE_EXT or GL_SKIP_DECODE_EXT */ GLboolean CubeMapSeamless; /**< GL_AMD_seamless_cubemap_per_texture */ + + /** GL_ARB_bindless_texture */ + struct util_dynarray Handles; + bool HandleAllocated; }; @@ -1037,6 +1056,11 @@ struct gl_texture_object /** GL_ARB_shader_image_load_store */ GLenum ImageFormatCompatibilityType; + + /** GL_ARB_bindless_texture */ + struct util_dynarray SamplerHandles; + struct util_dynarray ImageHandles; + bool HandleAllocated; }; @@ -1064,6 +1088,87 @@ struct gl_tex_env_combine_state }; +/** Compressed TexEnv effective Combine mode */ +enum gl_tex_env_mode +{ + TEXENV_MODE_REPLACE, /* r = a0 */ + TEXENV_MODE_MODULATE, /* r = a0 * a1 */ + TEXENV_MODE_ADD, /* r = a0 + a1 */ + TEXENV_MODE_ADD_SIGNED, /* r = a0 + a1 - 0.5 */ + TEXENV_MODE_INTERPOLATE, /* r = a0 * a2 + a1 * (1 - a2) */ + TEXENV_MODE_SUBTRACT, /* r = a0 - a1 */ + TEXENV_MODE_DOT3_RGB, /* r = a0 . a1 */ + TEXENV_MODE_DOT3_RGB_EXT, /* r = a0 . a1 */ + TEXENV_MODE_DOT3_RGBA, /* r = a0 . a1 */ + TEXENV_MODE_DOT3_RGBA_EXT, /* r = a0 . a1 */ + TEXENV_MODE_MODULATE_ADD_ATI, /* r = a0 * a2 + a1 */ + TEXENV_MODE_MODULATE_SIGNED_ADD_ATI, /* r = a0 * a2 + a1 - 0.5 */ + TEXENV_MODE_MODULATE_SUBTRACT_ATI, /* r = a0 * a2 - a1 */ + TEXENV_MODE_ADD_PRODUCTS_NV, /* r = a0 * a1 + a2 * a3 */ + TEXENV_MODE_ADD_PRODUCTS_SIGNED_NV, /* r = a0 * a1 + a2 * a3 - 0.5 */ +}; + + +/** Compressed TexEnv Combine source */ +enum gl_tex_env_source +{ + TEXENV_SRC_TEXTURE0, + TEXENV_SRC_TEXTURE1, + TEXENV_SRC_TEXTURE2, + TEXENV_SRC_TEXTURE3, + TEXENV_SRC_TEXTURE4, + TEXENV_SRC_TEXTURE5, + TEXENV_SRC_TEXTURE6, + TEXENV_SRC_TEXTURE7, + TEXENV_SRC_TEXTURE, + TEXENV_SRC_PREVIOUS, + TEXENV_SRC_PRIMARY_COLOR, + TEXENV_SRC_CONSTANT, + TEXENV_SRC_ZERO, + TEXENV_SRC_ONE, +}; + + +/** Compressed TexEnv Combine operand */ +enum gl_tex_env_operand +{ + TEXENV_OPR_COLOR, + TEXENV_OPR_ONE_MINUS_COLOR, + TEXENV_OPR_ALPHA, + TEXENV_OPR_ONE_MINUS_ALPHA, +}; + + +/** Compressed TexEnv Combine argument */ +struct gl_tex_env_argument +{ +#ifdef __GNUC__ + __extension__ uint8_t Source:4; /**< TEXENV_SRC_x */ + __extension__ uint8_t Operand:2; /**< TEXENV_OPR_x */ +#else + uint8_t Source; /**< SRC_x */ + uint8_t Operand; /**< OPR_x */ +#endif +}; + + +/*** + * Compressed TexEnv Combine state. + */ +struct gl_tex_env_combine_packed +{ + uint32_t ModeRGB:4; /**< Effective mode for RGB as 4 bits */ + uint32_t ModeA:4; /**< Effective mode for RGB as 4 bits */ + uint32_t ScaleShiftRGB:2; /**< 0, 1 or 2 */ + uint32_t ScaleShiftA:2; /**< 0, 1 or 2 */ + uint32_t NumArgsRGB:3; /**< Number of inputs used for the RGB combiner */ + uint32_t NumArgsA:3; /**< Number of inputs used for the A combiner */ + /** Source arguments in a packed manner */ + struct gl_tex_env_argument ArgsRGB[MAX_COMBINER_TERMS]; + struct gl_tex_env_argument ArgsA[MAX_COMBINER_TERMS]; +}; + + /** * TexGenEnabled flags. */ @@ -1166,6 +1271,8 @@ struct gl_texture_unit /** Points to highest priority, complete and enabled texture object */ struct gl_texture_object *_Current; + /** Current compressed TexEnv & Combine state */ + struct gl_tex_env_combine_packed _CurrentCombinePacked; }; @@ -1306,6 +1413,8 @@ struct gl_buffer_object unsigned MinMaxCacheHitIndices; unsigned MinMaxCacheMissIndices; bool MinMaxCacheDirty; + + bool HandleAllocated; /**< GL_ARB_bindless_texture */ }; @@ -1399,9 +1508,8 @@ struct gl_vertex_buffer_binding /** - * A representation of "Vertex Array Objects" (VAOs) from OpenGL 3.1+, - * GL_ARB_vertex_array_object, or the original GL_APPLE_vertex_array_object - * extension. + * A representation of "Vertex Array Objects" (VAOs) from OpenGL 3.1+ / + * the GL_ARB_vertex_array_object extension. */ struct gl_vertex_array_object { @@ -1412,24 +1520,6 @@ struct gl_vertex_array_object GLchar *Label; /**< GL_KHR_debug */ - mtx_t Mutex; - - /** - * Does the VAO use ARB semantics or Apple semantics? - * - * There are several ways in which ARB_vertex_array_object and - * APPLE_vertex_array_object VAOs have differing semantics. At the very - * least, - * - * - ARB VAOs require that all array data be sourced from vertex buffer - * objects, but Apple VAOs do not. - * - * - ARB VAOs require that names come from GenVertexArrays. - * - * This flag notes which behavior governs this VAO. - */ - GLboolean ARBsemantics; - /** * Has this array object been bound? */ @@ -1493,7 +1583,7 @@ typedef enum */ struct gl_array_attrib { - /** Currently bound array object. See _mesa_BindVertexArrayAPPLE() */ + /** Currently bound array object. */ struct gl_vertex_array_object *VAO; /** The default vertex array object */ @@ -1502,7 +1592,7 @@ struct gl_array_attrib /** The last VAO accessed by a DSA function */ struct gl_vertex_array_object *LastLookedUpVAO; - /** Array objects (GL_ARB/APPLE_vertex_array_object) */ + /** Array objects (GL_ARB_vertex_array_object) */ struct _mesa_HashTable *Objects; GLint ActiveTexture; /**< Client Active Texture */ @@ -1859,6 +1949,23 @@ struct gl_perf_monitor_group }; +/** + * A query object instance as described in INTEL_performance_query. + * + * NB: We want to keep this and the corresponding backend structure + * relatively lean considering that applications may expect to + * allocate enough objects to be able to query around all draw calls + * in a frame. + */ +struct gl_perf_query_object +{ + GLuint Id; /**< hash table ID/name */ + unsigned Used:1; /**< has been used for 1 or more queries */ + unsigned Active:1; /**< inside Begin/EndPerfQuery */ + unsigned Ready:1; /**< result is ready? */ +}; + + /** * Context state for AMD_performance_monitor. */ @@ -1873,6 +1980,51 @@ struct gl_perf_monitor_state }; +/** + * Context state for INTEL_performance_query. + */ +struct gl_perf_query_state +{ + struct _mesa_HashTable *Objects; /**< The table of all performance query objects */ +}; + + +/** + * A bindless sampler object. + */ +struct gl_bindless_sampler +{ + /** Texture unit (set by glUniform1()). */ + GLubyte unit; + + /** Texture Target (TEXTURE_1D/2D/3D/etc_INDEX). */ + gl_texture_index target; + + /** Whether this bindless sampler is bound to a unit. */ + GLboolean bound; + + /** Pointer to the base of the data. */ + GLvoid *data; +}; + +/** + * A bindless image object. + */ +struct gl_bindless_image +{ + /** Image unit (set by glUniform1()). */ + GLubyte unit; + + /** Access qualifier (GL_READ_WRITE, GL_READ_ONLY, GL_WRITE_ONLY) */ + GLenum access; + + /** Whether this bindless image is bound to a unit. */ + GLboolean bound; + + /** Pointer to the base of the data. */ + GLvoid *data; +}; + /** * Names of the various vertex/fragment program register files, etc. * @@ -1913,7 +2065,6 @@ struct gl_program /** FIXME: This must be first until we split shader_info from nir_shader */ struct shader_info info; - mtx_t Mutex; GLuint Id; GLint RefCount; GLubyte *String; /**< Null-terminated program text */ @@ -1927,16 +2078,15 @@ struct gl_program bool is_arb_asm; /** Is this an ARB assembly-style program */ + /** Is this program written to on disk shader cache */ + bool program_written_to_cache; + GLbitfield64 SecondaryOutputsWritten; /**< Subset of OutputsWritten outputs written with non-zero index. */ GLbitfield TexturesUsed[MAX_COMBINED_TEXTURE_IMAGE_UNITS]; /**< TEXTURE_x_BIT bitmask */ GLbitfield SamplersUsed; /**< Bitfield of which samplers are used */ GLbitfield ShadowSamplers; /**< Texture units used for shadow sampling. */ GLbitfield ExternalSamplersUsed; /**< Texture units used for samplerExternalOES */ - /* Vertex and geometry shaders fields */ - unsigned ClipDistanceArraySize; - unsigned CullDistanceArraySize; - /* Fragement shader only fields */ GLboolean OriginUpperLeft; GLboolean PixelCenterInteger; @@ -2009,6 +2159,22 @@ struct gl_program */ gl_texture_index SamplerTargets[MAX_SAMPLERS]; + /** + * Number of samplers declared with the bindless_sampler layout + * qualifier as specified by ARB_bindless_texture. + */ + GLuint NumBindlessSamplers; + GLboolean HasBoundBindlessSampler; + struct gl_bindless_sampler *BindlessSamplers; + + /** + * Number of images declared with the bindless_image layout qualifier + * as specified by ARB_bindless_texture. + */ + GLuint NumBindlessImages; + GLboolean HasBoundBindlessImage; + struct gl_bindless_image *BindlessImages; + union { struct { /** @@ -2085,11 +2251,8 @@ struct gl_program_state struct gl_vertex_program_state { GLboolean Enabled; /**< User-set GL_VERTEX_PROGRAM_ARB/NV flag */ - GLboolean _Enabled; /**< Enabled and _valid_ user program? */ GLboolean PointSizeEnabled; /**< GL_VERTEX_PROGRAM_POINT_SIZE_ARB/NV */ GLboolean TwoSideEnabled; /**< GL_VERTEX_PROGRAM_TWO_SIDE_ARB/NV */ - /** Computed two sided lighting for fixed function/programs. */ - GLboolean _TwoSideEnabled; struct gl_program *Current; /**< User-bound vertex program */ /** Currently enabled and valid vertex program (including internal @@ -2151,7 +2314,6 @@ struct gl_geometry_program_state struct gl_fragment_program_state { GLboolean Enabled; /**< User-set fragment program enable flag */ - GLboolean _Enabled; /**< Enabled and _valid_ user program? */ struct gl_program *Current; /**< User-bound fragment program */ /** Currently enabled and valid fragment program (including internal @@ -2220,7 +2382,6 @@ struct ati_fragment_shader struct gl_ati_fragment_shader_state { GLboolean Enabled; - GLboolean _Enabled; /**< enabled and valid shader? */ GLboolean Compiling; GLfloat GlobalConstants[8][4]; struct ati_fragment_shader *Current; @@ -2242,23 +2403,6 @@ struct gl_subroutine_function */ struct gl_shader_info { - bool uses_gl_fragcoord; - bool redeclares_gl_fragcoord; - bool PostDepthCoverage; - bool InnerCoverage; - bool ARB_fragment_coord_conventions_enable; - - /** - * Fragment shader state from GLSL 1.50 layout qualifiers. - */ - bool origin_upper_left; - bool pixel_center_integer; - - struct { - /** Global xfb_stride out qualifier if any */ - GLuint BufferStride[MAX_FEEDBACK_BUFFERS]; - } TransformFeedback; - /** * Tessellation Control shader state from layout qualifiers. */ @@ -2279,11 +2423,9 @@ struct gl_shader_info * in this shader. */ GLenum PrimitiveMode; - /** - * GL_EQUAL, GL_FRACTIONAL_ODD, GL_FRACTIONAL_EVEN, or 0 if it's not set - * in this shader. - */ - GLenum Spacing; + + enum gl_tess_spacing Spacing; + /** * GL_CW, GL_CCW, or 0 if it's not set in this shader. */ @@ -2317,12 +2459,6 @@ struct gl_shader_info GLenum OutputType; } Geom; - /** - * Whether early fragment tests are enabled as defined by - * ARB_shader_image_load_store. - */ - bool EarlyFragmentTests; - /** * Compute shader state from ARB_compute_shader and * ARB_compute_variable_group_size layout qualifiers. @@ -2383,15 +2519,6 @@ struct gl_linked_shader struct exec_list *packed_varyings; struct exec_list *fragdata_arrays; struct glsl_symbol_table *symbols; - - /** - * Number of image uniforms defined in the shader. It specifies - * the number of valid elements in the \c ImageUnits and \c - * ImageAccess arrays. - */ - GLuint NumImages; - - struct gl_shader_info info; }; static inline GLbitfield gl_external_samplers(struct gl_program *prog) @@ -2408,6 +2535,19 @@ static inline GLbitfield gl_external_samplers(struct gl_program *prog) return external_samplers; } +/** + * Compile status enum. compile_skipped is used to indicate the compile + * was skipped due to the shader matching one that's been seen before by + * the on-disk cache. + */ +enum gl_compile_status +{ + compile_failure = 0, + compile_success, + compile_skipped, + compiled_no_opts +}; + /** * A GLSL shader object. */ @@ -2422,8 +2562,9 @@ struct gl_shader GLuint Name; /**< AKA the handle */ GLint RefCount; /**< Reference count */ GLchar *Label; /**< GL_KHR_debug */ + unsigned char sha1[20]; /**< SHA1 hash of pre-processed source */ GLboolean DeletePending; - GLboolean CompileStatus; + enum gl_compile_status CompileStatus; bool IsES; /**< True if this shader uses GLSL ES */ #ifdef DEBUG @@ -2431,6 +2572,8 @@ struct gl_shader #endif const GLchar *Source; /**< Source code string */ + const GLchar *FallbackSource; /**< Fallback string used by on-disk cache*/ + GLchar *InfoLog; unsigned Version; /**< GLSL version used for linking */ @@ -2443,6 +2586,39 @@ struct gl_shader */ GLbitfield BlendSupport; + /** + * Whether early fragment tests are enabled as defined by + * ARB_shader_image_load_store. + */ + bool EarlyFragmentTests; + + bool ARB_fragment_coord_conventions_enable; + + bool redeclares_gl_fragcoord; + bool uses_gl_fragcoord; + + bool PostDepthCoverage; + bool InnerCoverage; + + /** + * Fragment shader state from GLSL 1.50 layout qualifiers. + */ + bool origin_upper_left; + bool pixel_center_integer; + + /** + * Whether bindless_sampler/bindless_image, and respectively + * bound_sampler/bound_image are declared at global scope as defined by + * ARB_bindless_texture. + */ + bool bindless_sampler; + bool bindless_image; + bool bound_sampler; + bool bound_image; + + /** Global xfb_stride out qualifier if any */ + GLuint TransformFeedbackBufferStride[MAX_FEEDBACK_BUFFERS]; + struct gl_shader_info info; }; @@ -2657,6 +2833,17 @@ struct gl_program_resource uint8_t StageReferences; /** Bitmask of shader stage references. */ }; +/** + * Link status enum. linking_skipped is used to indicate linking + * was skipped due to the shader being loaded from the on-disk cache. + */ +enum gl_link_status +{ + linking_failure = 0, + linking_success, + linking_skipped +}; + /** * A data structure to be shared by gl_shader_program and gl_program. */ @@ -2664,6 +2851,9 @@ struct gl_shader_program_data { GLint RefCount; /**< Reference count */ + /** SHA1 hash of linked shader program */ + unsigned char sha1[20]; + unsigned NumUniformStorage; unsigned NumHiddenUniforms; struct gl_uniform_storage *UniformStorage; @@ -2677,7 +2867,24 @@ struct gl_shader_program_data struct gl_active_atomic_buffer *AtomicBuffers; unsigned NumAtomicBuffers; - GLboolean LinkStatus; /**< GL_LINK_STATUS */ + /* Shader cache variables used during restore */ + unsigned NumUniformDataSlots; + union gl_constant_value *UniformDataSlots; + + bool cache_fallback; + + /* TODO: This used by Gallium drivers to skip the cache on tgsi fallback. + * All structures (gl_program, uniform storage, etc) will get recreated + * even though we have already loaded them from cache. Once the i965 cache + * lands we should switch to using the cache_fallback support. + */ + bool skip_cache; + + /** List of all active resources after linking. */ + struct gl_program_resource *ProgramResourceList; + unsigned NumProgramResourceList; + + enum gl_link_status LinkStatus; /**< GL_LINK_STATUS */ GLboolean Validated; GLchar *InfoLog; @@ -2747,25 +2954,11 @@ struct gl_shader_program GLchar **VaryingNames; /**< Array [NumVarying] of char * */ } TransformFeedback; - struct gl_program *xfb_program; + struct gl_program *last_vert_prog; /** Post-link gl_FragDepth layout for ARB_conservative_depth. */ enum gl_frag_depth_layout FragDepthLayout; - /** - * Tessellation Evaluation shader state from layout qualifiers. - */ - struct { - /** - * True if gl_ClipDistance is written to. Copied into - * gl_program by _mesa_copy_linked_program_data(). - */ - GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or - 0 if not present. */ - GLuint CullDistanceArraySize; /**< Size of the gl_CullDistance array, or - 0 if not present. */ - } TessEval; - /** * Geometry shader state - copied into gl_program by * _mesa_copy_linked_program_data(). @@ -2773,49 +2966,19 @@ struct gl_shader_program struct { GLint VerticesIn; - /** - * True if gl_ClipDistance is written to. Copied into - * gl_program by _mesa_copy_linked_program_data(). - */ - GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or - 0 if not present. */ - GLuint CullDistanceArraySize; /**< Size of the gl_CullDistance array, or - 0 if not present. */ bool UsesEndPrimitive; bool UsesStreams; } Geom; - /** Vertex shader state */ - struct { - /** - * True if gl_ClipDistance is written to. Copied into gl_program - * by _mesa_copy_linked_program_data(). - */ - GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or - 0 if not present. */ - GLuint CullDistanceArraySize; /**< Size of the gl_CullDistance array, or - 0 if not present. */ - } Vert; - /** * Compute shader state - copied into gl_program by * _mesa_copy_linked_program_data(). */ struct { - /** - * If this shader contains a compute stage, size specified using - * local_size_{x,y,z}. Otherwise undefined. - */ - unsigned LocalSize[3]; /** * Size of shared variables accessed by the compute shader. */ unsigned SharedSize; - - /** - * Whether a variable work group size has been specified. - */ - bool LocalSizeVariable; } Comp; /** Data shared by gl_program and gl_shader_program */ @@ -2837,11 +3000,9 @@ struct gl_shader_program struct exec_list EmptyUniformLocations; /** - * Size of the gl_ClipDistance array that is output from the last pipeline - * stage before the fragment shader. + * Total number of explicit uniform location including inactive uniforms. */ - unsigned LastClipDistanceArraySize; - unsigned LastCullDistanceArraySize; + unsigned NumExplicitUniformLocations; /** * Map of active uniform names to locations @@ -2866,10 +3027,6 @@ struct gl_shader_program */ struct gl_linked_shader *_LinkedShaders[MESA_SHADER_STAGES]; - /** List of all active resources after linking. */ - struct gl_program_resource *ProgramResourceList; - unsigned NumProgramResourceList; - /* True if any of the fragment shaders attached to this program use: * #extension ARB_fragment_coord_conventions: enable */ @@ -2879,14 +3036,14 @@ struct gl_shader_program #define GLSL_DUMP 0x1 /**< Dump shaders to stdout */ #define GLSL_LOG 0x2 /**< Write shaders to files */ -#define GLSL_OPT 0x4 /**< Force optimizations (override pragmas) */ -#define GLSL_NO_OPT 0x8 /**< Force no optimizations (override pragmas) */ -#define GLSL_UNIFORMS 0x10 /**< Print glUniform calls */ -#define GLSL_NOP_VERT 0x20 /**< Force no-op vertex shaders */ -#define GLSL_NOP_FRAG 0x40 /**< Force no-op fragment shaders */ -#define GLSL_USE_PROG 0x80 /**< Log glUseProgram calls */ -#define GLSL_REPORT_ERRORS 0x100 /**< Print compilation errors */ -#define GLSL_DUMP_ON_ERROR 0x200 /**< Dump shaders to stderr on compile error */ +#define GLSL_UNIFORMS 0x4 /**< Print glUniform calls */ +#define GLSL_NOP_VERT 0x8 /**< Force no-op vertex shaders */ +#define GLSL_NOP_FRAG 0x10 /**< Force no-op fragment shaders */ +#define GLSL_USE_PROG 0x20 /**< Log glUseProgram calls */ +#define GLSL_REPORT_ERRORS 0x40 /**< Print compilation errors */ +#define GLSL_DUMP_ON_ERROR 0x80 /**< Dump shaders to stderr on compile error */ +#define GLSL_CACHE_INFO 0x100 /**< Print debug information about shader cache */ +#define GLSL_CACHE_FALLBACK 0x200 /**< Force shader cache fallback paths */ /** @@ -2902,8 +3059,6 @@ struct gl_pipeline_object GLint RefCount; - mtx_t Mutex; - GLchar *Label; /**< GL_KHR_debug */ /** @@ -2911,9 +3066,9 @@ struct gl_pipeline_object * * There is a separate program set for each shader stage. */ - struct gl_shader_program *CurrentProgram[MESA_SHADER_STAGES]; + struct gl_program *CurrentProgram[MESA_SHADER_STAGES]; - struct gl_program *_CurrentFragmentProgram; + struct gl_shader_program *ReferencedPrograms[MESA_SHADER_STAGES]; /** * Program used by glUniform calls. @@ -2953,7 +3108,6 @@ struct gl_shader_compiler_options { /** Driver-selectable options: */ GLboolean EmitNoLoops; - GLboolean EmitNoFunctions; GLboolean EmitNoCont; /**< Emit CONT opcode? */ GLboolean EmitNoMainReturn; /**< Emit CONT/RET opcodes? */ GLboolean EmitNoPow; /**< Emit POW opcodes? */ @@ -3027,6 +3181,10 @@ struct gl_query_state struct gl_query_object *PrimitivesGenerated[MAX_VERTEX_STREAMS]; struct gl_query_object *PrimitivesWritten[MAX_VERTEX_STREAMS]; + /** GL_ARB_transform_feedback_overflow_query */ + struct gl_query_object *TransformFeedbackOverflow[MAX_VERTEX_STREAMS]; + struct gl_query_object *TransformFeedbackOverflowAny; + /** GL_ARB_timer_query */ struct gl_query_object *TimeElapsed; @@ -3112,6 +3270,11 @@ struct gl_shared_state /** GL_ARB_sampler_objects */ struct _mesa_HashTable *SamplerObjects; + /* GL_ARB_bindless_texture */ + struct hash_table_u64 *TextureHandles; + struct hash_table_u64 *ImageHandles; + mtx_t HandlesMutex; /**< For texture/image handles safety */ + /** * Some context in this share group was affected by a GPU reset * @@ -3538,6 +3701,24 @@ struct gl_constants */ GLboolean AllowGLSLExtensionDirectiveMidShader; + /** + * Allow GLSL built-in variables to be redeclared verbatim + */ + GLboolean AllowGLSLBuiltinVariableRedeclaration; + + /** + * Allow creating a higher compat profile (version 3.1+) for apps that + * request it. Be careful when adding that driconf option because some + * features are unimplemented and might not work correctly. + */ + GLboolean AllowHigherCompatVersion; + + /** + * Force computing the absolute value for sqrt() and inversesqrt() to follow + * D3D9 when apps rely on this behaviour. + */ + GLboolean ForceGLSLAbsSqrt; + /** * Force uninitialized variables to default to zero. */ @@ -3798,6 +3979,15 @@ struct gl_constants /** GL_OES_primitive_bounding_box */ bool NoPrimitiveBoundingBoxOutput; + + /** GL_ARB_sparse_buffer */ + GLuint SparseBufferPageSize; + + /** Used as an input for sha1 generation in the on-disk shader cache */ + unsigned char *dri_config_options_sha1; + + /** When drivers are OK with mapped buffers during draw and other calls. */ + bool AllowMappedBuffersDuringExecution; }; @@ -3817,6 +4007,7 @@ struct gl_extensions GLboolean ARB_ES3_2_compatibility; GLboolean ARB_arrays_of_arrays; GLboolean ARB_base_instance; + GLboolean ARB_bindless_texture; GLboolean ARB_blend_func_extended; GLboolean ARB_buffer_storage; GLboolean ARB_clear_texture; @@ -3848,6 +4039,7 @@ struct gl_extensions GLboolean ARB_explicit_uniform_location; GLboolean ARB_gpu_shader5; GLboolean ARB_gpu_shader_fp64; + GLboolean ARB_gpu_shader_int64; GLboolean ARB_half_float_vertex; GLboolean ARB_indirect_parameters; GLboolean ARB_instanced_arrays; @@ -3865,6 +4057,7 @@ struct gl_extensions GLboolean ARB_seamless_cube_map; GLboolean ARB_shader_atomic_counter_ops; GLboolean ARB_shader_atomic_counters; + GLboolean ARB_shader_ballot; GLboolean ARB_shader_bit_encoding; GLboolean ARB_shader_clock; GLboolean ARB_shader_draw_parameters; @@ -3874,13 +4067,13 @@ struct gl_extensions GLboolean ARB_shader_precision; GLboolean ARB_shader_stencil_export; GLboolean ARB_shader_storage_buffer_object; - GLboolean ARB_shader_subroutine; GLboolean ARB_shader_texture_image_samples; GLboolean ARB_shader_texture_lod; GLboolean ARB_shader_viewport_layer_array; GLboolean ARB_shading_language_packing; GLboolean ARB_shading_language_420pack; GLboolean ARB_shadow; + GLboolean ARB_sparse_buffer; GLboolean ARB_stencil_texturing; GLboolean ARB_sync; GLboolean ARB_tessellation_shader; @@ -3910,6 +4103,7 @@ struct gl_extensions GLboolean ARB_transform_feedback2; GLboolean ARB_transform_feedback3; GLboolean ARB_transform_feedback_instanced; + GLboolean ARB_transform_feedback_overflow_query; GLboolean ARB_uniform_buffer_object; GLboolean ARB_vertex_attrib_64bit; GLboolean ARB_vertex_program; @@ -3988,6 +4182,7 @@ struct gl_extensions GLboolean MESA_shader_integer_functions; GLboolean MESA_ycbcr_texture; GLboolean NV_conditional_render; + GLboolean NV_fill_rectangle; GLboolean NV_fog_distance; GLboolean NV_point_sprite; GLboolean NV_primitive_restart; @@ -4072,10 +4267,10 @@ struct gl_matrix_stack #define _NEW_POLYGONSTIPPLE (1u << 13) /**< gl_context::PolygonStipple */ #define _NEW_SCISSOR (1u << 14) /**< gl_context::Scissor */ #define _NEW_STENCIL (1u << 15) /**< gl_context::Stencil */ -#define _NEW_TEXTURE (1u << 16) /**< gl_context::Texture */ +#define _NEW_TEXTURE_OBJECT (1u << 16) /**< gl_context::Texture (bindings only) */ #define _NEW_TRANSFORM (1u << 17) /**< gl_context::Transform */ #define _NEW_VIEWPORT (1u << 18) /**< gl_context::Viewport */ -/* gap, re-use for core Mesa state only; use ctx->DriverFlags otherwise */ +#define _NEW_TEXTURE_STATE (1u << 19) /**< gl_context::Texture (states only) */ #define _NEW_ARRAY (1u << 20) /**< gl_context::Array */ #define _NEW_RENDERMODE (1u << 21) /**< gl_context::RenderMode, etc */ #define _NEW_BUFFERS (1u << 22) /**< gl_context::Visual, DrawBuffer, */ @@ -4096,8 +4291,10 @@ struct gl_matrix_stack * Composite state flags */ /*@{*/ +#define _NEW_TEXTURE (_NEW_TEXTURE_OBJECT | _NEW_TEXTURE_STATE) + #define _MESA_NEW_NEED_EYE_COORDS (_NEW_LIGHT | \ - _NEW_TEXTURE | \ + _NEW_TEXTURE_STATE | \ _NEW_POINT | \ _NEW_PROGRAM | \ _NEW_MODELVIEW) @@ -4264,6 +4461,23 @@ struct gl_driver_flags * gl_context::IntelConservativeRasterization */ uint64_t NewIntelConservativeRasterization; + + /** + * gl_context::Scissor::WindowRects + */ + uint64_t NewWindowRectangles; + + /** gl_context::Color::sRGBEnabled */ + uint64_t NewFramebufferSRGB; + + /** gl_context::Scissor::EnableFlags */ + uint64_t NewScissorTest; + + /** gl_context::Scissor::ScissorArray */ + uint64_t NewScissorRect; + + /** gl_context::Stencil */ + uint64_t NewStencil; }; struct gl_uniform_buffer_binding @@ -4367,6 +4581,19 @@ struct gl_subroutine_index_binding GLuint *IndexPtr; }; +struct gl_texture_handle_object +{ + struct gl_texture_object *texObj; + struct gl_sampler_object *sampObj; + GLuint64 handle; +}; + +struct gl_image_handle_object +{ + struct gl_image_unit imgObj; + GLuint64 handle; +}; + /** * Mesa rendering context. * @@ -4383,6 +4610,7 @@ struct gl_context /** \name API function pointer tables */ /*@{*/ gl_api API; + /** * The current dispatch table for non-displaylist-saving execution, either * BeginEnd or OutsideBeginEnd @@ -4405,12 +4633,28 @@ struct gl_context */ struct _glapi_table *ContextLost; /** - * Tracks the current dispatch table out of the 4 above, so that it can be - * re-set on glXMakeCurrent(). + * Dispatch table used to marshal API calls from the client program to a + * separate server thread. NULL if API calls are not being marshalled to + * another thread. + */ + struct _glapi_table *MarshalExec; + /** + * Dispatch table currently in use for fielding API calls from the client + * program. If API calls are being marshalled to another thread, this == + * MarshalExec. Otherwise it == CurrentServerDispatch. */ - struct _glapi_table *CurrentDispatch; + struct _glapi_table *CurrentClientDispatch; + + /** + * Dispatch table currently in use for performing API calls. == Save or + * Exec. + */ + struct _glapi_table *CurrentServerDispatch; + /*@}*/ + struct glthread_state *GLThread; + struct gl_config Visual; struct gl_framebuffer *DrawBuffer; /**< buffer for writing */ struct gl_framebuffer *ReadBuffer; /**< buffer for reading */ @@ -4542,6 +4786,7 @@ struct gl_context struct gl_transform_feedback_state TransformFeedback; struct gl_perf_monitor_state PerfMonitor; + struct gl_perf_query_state PerfQuery; struct gl_buffer_object *DrawIndirectBuffer; /** < GL_ARB_draw_indirect */ struct gl_buffer_object *ParameterBuffer; /** < GL_ARB_indirect_parameters */ @@ -4701,6 +4946,16 @@ struct gl_context * Stores the arguments to glPrimitiveBoundingBox */ GLfloat PrimitiveBoundingBox[8]; + + struct disk_cache *Cache; + + /** + * \name GL_ARB_bindless_texture + */ + /*@{*/ + struct hash_table_u64 *ResidentTextureHandles; + struct hash_table_u64 *ResidentImageHandles; + /*@}*/ }; /**