nir: add interpolation qualifiers for color sysvals into shader_info
[mesa.git] / src / compiler / shader_info.h
index 48a32f6f4ffbcaddc5398d3be2f5d2cd5cc87f73..760bc5556cbee826e257bfbbb78e84b868665c20 100644 (file)
@@ -42,7 +42,9 @@ struct spirv_supported_capabilities {
    bool descriptor_indexing;
    bool device_group;
    bool draw_parameters;
+   bool float32_atomic_add;
    bool float64;
+   bool float64_atomic_add;
    bool fragment_shader_sample_interlock;
    bool fragment_shader_pixel_interlock;
    bool geometry_streams;
@@ -85,6 +87,7 @@ struct spirv_supported_capabilities {
    bool amd_trinary_minmax;
    bool amd_image_read_write_lod;
    bool amd_shader_explicit_vertex_parameter;
+   bool amd_image_gather_bias_lod;
 };
 
 typedef struct shader_info {
@@ -115,8 +118,6 @@ typedef struct shader_info {
    uint8_t num_ssbos;
    /* Number of images used by this shader */
    uint8_t num_images;
-   /* Index of the last MSAA image. */
-   int8_t last_msaa_image;
 
    /* Which inputs are actually read */
    uint64_t inputs_read;
@@ -151,6 +152,10 @@ typedef struct shader_info {
 
    /** Bitfield of which images are used */
    uint32_t images_used;
+   /** Bitfield of which images are buffers. */
+   uint32_t image_buffers;
+   /** Bitfield of which images are MSAA. */
+   uint32_t msaa_images;
 
    /* SPV_KHR_float_controls: execution mode for floating point ops */
    uint16_t float_controls_execution_mode;
@@ -188,9 +193,17 @@ typedef struct shader_info {
    /* Whether flrp has been lowered. */
    bool flrp_lowered:1;
 
+   /* Whether nir_lower_io has been called to lower derefs.
+    * nir_variables for inputs and outputs might not be present in the IR.
+    */
+   bool io_lowered:1;
+
    /* Whether the shader writes memory, including transform feedback. */
    bool writes_memory:1;
 
+   /* Whether gl_Layer is viewport-relative */
+   bool layer_viewport_relative:1;
+
    union {
       struct {
          /* Which inputs are doubles */
@@ -226,8 +239,8 @@ typedef struct shader_info {
          /** Whether or not this shader uses EndPrimitive */
          bool uses_end_primitive:1;
 
-         /** Whether or not this shader uses non-zero streams */
-         bool uses_streams:1;
+         /** The streams used in this shaders (max. 4) */
+         uint8_t active_stream_mask:4;
       } gs;
 
       struct {
@@ -294,6 +307,17 @@ typedef struct shader_info {
 
          /** gl_FragDepth layout for ARB_conservative_depth. */
          enum gl_frag_depth_layout depth_layout:3;
+
+         /**
+          * Interpolation qualifiers for drivers that lowers color inputs
+          * to system values.
+          */
+         unsigned color0_interp:3; /* glsl_interp_mode */
+         bool color0_sample:1;
+         bool color0_centroid:1;
+         unsigned color1_interp:3; /* glsl_interp_mode */
+         bool color1_sample:1;
+         bool color1_centroid:1;
       } fs;
 
       struct {
@@ -330,6 +354,10 @@ typedef struct shader_info {
          uint8_t tcs_vertices_out;
          enum gl_tess_spacing spacing:2;
 
+         /** Is the vertex order counterclockwise? */
+         bool ccw:1;
+         bool point_mode:1;
+
          /* Bit mask of TCS per-vertex inputs (VS outputs) that are used
           * with a vertex index that is NOT the invocation id
           */
@@ -339,10 +367,6 @@ typedef struct shader_info {
           * with a vertex index that is NOT the invocation id
           */
          uint64_t tcs_cross_invocation_outputs_read;
-
-         /** Is the vertex order counterclockwise? */
-         bool ccw:1;
-         bool point_mode:1;
       } tess;
    };
 } shader_info;