egl/wayland: add missing newline between functions
[mesa.git] / src / compiler / shader_info.h
index 7c12dadd1cecc2af02dded304f5ee5d5e472c908..57b0eabd79a0fda81b1cc846aa5e88c21e265136 100644 (file)
@@ -53,6 +53,7 @@ struct spirv_supported_capabilities {
    bool int16;
    bool int64;
    bool int64_atomics;
+   bool integer_functions2;
    bool kernel;
    bool min_lod;
    bool multiview;
@@ -78,10 +79,13 @@ struct spirv_supported_capabilities {
    bool vk_memory_model;
    bool vk_memory_model_device_scope;
    bool float16;
+   bool amd_fragment_mask;
    bool amd_gcn_shader;
    bool amd_shader_ballot;
    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 {
@@ -104,12 +108,14 @@ typedef struct shader_info {
    uint8_t num_ubos;
    /* Number of atomic buffers used by this shader */
    uint8_t num_abos;
-   /* Number of shader storage buffers used by this shader */
+   /* Number of shader storage buffers (max .driver_location + 1) used by this
+    * shader.  In the case of nir_lower_atomics_to_ssbo being used, this will
+    * be the number of actual SSBOs in gl_program->info, and the lowered SSBOs
+    * and atomic counters in nir_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;
@@ -127,12 +133,28 @@ typedef struct shader_info {
    /* Which patch outputs are read */
    uint32_t patch_outputs_read;
 
+   /* Which inputs are read indirectly (subset of inputs_read) */
+   uint64_t inputs_read_indirectly;
+   /* Which outputs are read or written indirectly */
+   uint64_t outputs_accessed_indirectly;
+   /* Which patch inputs are read indirectly (subset of patch_inputs_read) */
+   uint64_t patch_inputs_read_indirectly;
+   /* Which patch outputs are read or written indirectly */
+   uint64_t patch_outputs_accessed_indirectly;
+
    /** Bitfield of which textures are used */
    uint32_t textures_used;
 
    /** Bitfield of which textures are used by texelFetch() */
    uint32_t textures_used_by_txf;
 
+   /** 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;
 
@@ -169,6 +191,12 @@ typedef struct shader_info {
    /* Whether flrp has been lowered. */
    bool flrp_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 */
@@ -210,6 +238,7 @@ typedef struct shader_info {
 
       struct {
          bool uses_discard:1;
+         bool uses_demote:1;
 
          /**
           * True if this fragment shader requires helper invocations.  This
@@ -310,6 +339,16 @@ typedef struct shader_info {
          /** 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
+          */
+         uint64_t tcs_cross_invocation_inputs_read;
+
+         /* Bit mask of TCS per-vertex outputs that are used
+          * with a vertex index that is NOT the invocation id
+          */
+         uint64_t tcs_cross_invocation_outputs_read;
       } tess;
    };
 } shader_info;