mtypes: move gl_program to shader_types.h
authorDave Airlie <airlied@redhat.com>
Fri, 7 Jan 2022 04:45:12 +0000 (14:45 +1000)
committerMarge Bot <emma+marge@anholt.net>
Thu, 20 Jan 2022 00:20:06 +0000 (00:20 +0000)
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14437>

src/mesa/main/mtypes.h
src/mesa/main/shader_types.h

index 2bce7b1..94c32c0 100644 (file)
@@ -2092,199 +2092,6 @@ struct gl_bindless_image
    GLvoid *data;
 };
 
-
-/**
- * Base class for any kind of program object
- */
-struct gl_program
-{
-   /** FIXME: This must be first until we split shader_info from nir_shader */
-   struct shader_info info;
-
-   GLuint Id;
-   GLint RefCount;
-   GLubyte *String;  /**< Null-terminated program text */
-
-   /** GL_VERTEX/FRAGMENT_PROGRAM_ARB, GL_GEOMETRY_PROGRAM_NV */
-   GLenum16 Target;
-   GLenum16 Format;    /**< String encoding format */
-
-   GLboolean _Used;        /**< Ever used for drawing? Used for debugging */
-
-   struct nir_shader *nir;
-
-   /* Saved and restored with metadata. Freed with ralloc. */
-   void *driver_cache_blob;
-   size_t driver_cache_blob_size;
-
-   /** 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 */
-   GLbitfield16 TexturesUsed[MAX_COMBINED_TEXTURE_IMAGE_UNITS];
-   /** Bitfield of which samplers are used */
-   GLbitfield SamplersUsed;
-   /** Texture units used for shadow sampling. */
-   GLbitfield ShadowSamplers;
-   /** Texture units used for samplerExternalOES */
-   GLbitfield ExternalSamplersUsed;
-
-   /** Named parameters, constants, etc. from program text */
-   struct gl_program_parameter_list *Parameters;
-
-   /** Map from sampler unit to texture unit (set by glUniform1i()) */
-   GLubyte SamplerUnits[MAX_SAMPLERS];
-
-   union {
-      /** Fields used by GLSL programs */
-      struct {
-         /** Data shared by gl_program and gl_shader_program */
-         struct gl_shader_program_data *data;
-
-         struct gl_active_atomic_buffer **AtomicBuffers;
-
-         /** Post-link transform feedback info. */
-         struct gl_transform_feedback_info *LinkedTransformFeedback;
-
-         /**
-          * Number of types for subroutine uniforms.
-          */
-         GLuint NumSubroutineUniformTypes;
-
-         /**
-          * Subroutine uniform remap table
-          * based on the program level uniform remap table.
-          */
-         GLuint NumSubroutineUniforms; /* non-sparse total */
-         GLuint NumSubroutineUniformRemapTable;
-         struct gl_uniform_storage **SubroutineUniformRemapTable;
-
-         /**
-          * Num of subroutine functions for this stage and storage for them.
-          */
-         GLuint NumSubroutineFunctions;
-         GLuint MaxSubroutineFunctionIndex;
-         struct gl_subroutine_function *SubroutineFunctions;
-
-         /**
-          * Map from image uniform index to image unit (set by glUniform1i())
-          *
-          * An image uniform index is associated with each image uniform by
-          * the linker.  The image index associated with each uniform is
-          * stored in the \c gl_uniform_storage::image field.
-          */
-         GLubyte ImageUnits[MAX_IMAGE_UNIFORMS];
-
-         /**
-          * Access qualifier specified in the shader for each image uniform
-          * 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.
-          */
-         GLenum16 ImageAccess[MAX_IMAGE_UNIFORMS];
-
-         GLuint NumUniformBlocks;
-         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)
-          */
-         GLubyte 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;
-      } sh;
-
-      /** ARB assembly-style program fields */
-      struct {
-         struct prog_instruction *Instructions;
-
-         /**
-          * Local parameters used by the program.
-          *
-          * It's dynamically allocated because it is rarely used (just
-          * assembly-style programs), and MAX_PROGRAM_LOCAL_PARAMS entries
-          * once it's allocated.
-          */
-         GLfloat (*LocalParams)[4];
-         unsigned MaxLocalParams;
-
-         /** Bitmask of which register files are read/written with indirect
-          * addressing.  Mask of (1 << PROGRAM_x) bits.
-          */
-         GLbitfield IndirectRegisterFiles;
-
-         /** Logical counts */
-         /*@{*/
-         GLuint NumInstructions;
-         GLuint NumTemporaries;
-         GLuint NumParameters;
-         GLuint NumAttributes;
-         GLuint NumAddressRegs;
-         GLuint NumAluInstructions;
-         GLuint NumTexInstructions;
-         GLuint NumTexIndirections;
-         /*@}*/
-         /** Native, actual h/w counts */
-         /*@{*/
-         GLuint NumNativeInstructions;
-         GLuint NumNativeTemporaries;
-         GLuint NumNativeParameters;
-         GLuint NumNativeAttributes;
-         GLuint NumNativeAddressRegs;
-         GLuint NumNativeAluInstructions;
-         GLuint NumNativeTexInstructions;
-         GLuint NumNativeTexIndirections;
-         /*@}*/
-
-         /** Used by ARB assembly-style programs. Can only be true for vertex
-          * programs.
-          */
-         GLboolean IsPositionInvariant;
-      } arb;
-   };
-};
-
-
 /**
  * State common to vertex and fragment programs.
  */
index d8f4f75..5a31425 100644 (file)
@@ -34,6 +34,7 @@
 #include "main/config.h" /* for MAX_FEEDBACK_BUFFERS */
 #include "main/glheader.h"
 #include "util/mesa-sha1.h"
+#include "compiler/shader_info.h"
 #include "compiler/glsl/list.h"
 
 /**
@@ -497,5 +498,196 @@ struct gl_shader_program
    GLboolean ARB_fragment_coord_conventions_enable;
 };
 
+/**
+ * Base class for any kind of program object
+ */
+struct gl_program
+{
+   /** FIXME: This must be first until we split shader_info from nir_shader */
+   struct shader_info info;
+
+   GLuint Id;
+   GLint RefCount;
+   GLubyte *String;  /**< Null-terminated program text */
+
+   /** GL_VERTEX/FRAGMENT_PROGRAM_ARB, GL_GEOMETRY_PROGRAM_NV */
+   GLenum16 Target;
+   GLenum16 Format;    /**< String encoding format */
+
+   GLboolean _Used;        /**< Ever used for drawing? Used for debugging */
+
+   struct nir_shader *nir;
+
+   /* Saved and restored with metadata. Freed with ralloc. */
+   void *driver_cache_blob;
+   size_t driver_cache_blob_size;
+
+   /** 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 */
+   GLbitfield16 TexturesUsed[MAX_COMBINED_TEXTURE_IMAGE_UNITS];
+   /** Bitfield of which samplers are used */
+   GLbitfield SamplersUsed;
+   /** Texture units used for shadow sampling. */
+   GLbitfield ShadowSamplers;
+   /** Texture units used for samplerExternalOES */
+   GLbitfield ExternalSamplersUsed;
+
+   /** Named parameters, constants, etc. from program text */
+   struct gl_program_parameter_list *Parameters;
+
+   /** Map from sampler unit to texture unit (set by glUniform1i()) */
+   GLubyte SamplerUnits[MAX_SAMPLERS];
+
+   union {
+      /** Fields used by GLSL programs */
+      struct {
+         /** Data shared by gl_program and gl_shader_program */
+         struct gl_shader_program_data *data;
+
+         struct gl_active_atomic_buffer **AtomicBuffers;
+
+         /** Post-link transform feedback info. */
+         struct gl_transform_feedback_info *LinkedTransformFeedback;
+
+         /**
+          * Number of types for subroutine uniforms.
+          */
+         GLuint NumSubroutineUniformTypes;
+
+         /**
+          * Subroutine uniform remap table
+          * based on the program level uniform remap table.
+          */
+         GLuint NumSubroutineUniforms; /* non-sparse total */
+         GLuint NumSubroutineUniformRemapTable;
+         struct gl_uniform_storage **SubroutineUniformRemapTable;
+
+         /**
+          * Num of subroutine functions for this stage and storage for them.
+          */
+         GLuint NumSubroutineFunctions;
+         GLuint MaxSubroutineFunctionIndex;
+         struct gl_subroutine_function *SubroutineFunctions;
+
+         /**
+          * Map from image uniform index to image unit (set by glUniform1i())
+          *
+          * An image uniform index is associated with each image uniform by
+          * the linker.  The image index associated with each uniform is
+          * stored in the \c gl_uniform_storage::image field.
+          */
+         GLubyte ImageUnits[MAX_IMAGE_UNIFORMS];
+
+         /**
+          * Access qualifier specified in the shader for each image uniform
+          * 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.
+          */
+         GLenum16 ImageAccess[MAX_IMAGE_UNIFORMS];
+
+         GLuint NumUniformBlocks;
+         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)
+          */
+         GLubyte 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;
+      } sh;
+
+      /** ARB assembly-style program fields */
+      struct {
+         struct prog_instruction *Instructions;
+
+         /**
+          * Local parameters used by the program.
+          *
+          * It's dynamically allocated because it is rarely used (just
+          * assembly-style programs), and MAX_PROGRAM_LOCAL_PARAMS entries
+          * once it's allocated.
+          */
+         GLfloat (*LocalParams)[4];
+         unsigned MaxLocalParams;
+
+         /** Bitmask of which register files are read/written with indirect
+          * addressing.  Mask of (1 << PROGRAM_x) bits.
+          */
+         GLbitfield IndirectRegisterFiles;
+
+         /** Logical counts */
+         /*@{*/
+         GLuint NumInstructions;
+         GLuint NumTemporaries;
+         GLuint NumParameters;
+         GLuint NumAttributes;
+         GLuint NumAddressRegs;
+         GLuint NumAluInstructions;
+         GLuint NumTexInstructions;
+         GLuint NumTexIndirections;
+         /*@}*/
+         /** Native, actual h/w counts */
+         /*@{*/
+         GLuint NumNativeInstructions;
+         GLuint NumNativeTemporaries;
+         GLuint NumNativeParameters;
+         GLuint NumNativeAttributes;
+         GLuint NumNativeAddressRegs;
+         GLuint NumNativeAluInstructions;
+         GLuint NumNativeTexInstructions;
+         GLuint NumNativeTexIndirections;
+         /*@}*/
+
+         /** Used by ARB assembly-style programs. Can only be true for vertex
+          * programs.
+          */
+         GLboolean IsPositionInvariant;
+      } arb;
+   };
+};
+
 
 #endif