"Fossies" - the Fresh Open Source Software Archive

Member "mesa-20.1.8/src/gallium/drivers/r600/r600_shader.h" (16 Sep 2020, 6376 Bytes) of package /linux/misc/mesa-20.1.8.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "r600_shader.h" see the Fossies "Dox" file reference documentation and the last Fossies "Diffs" side-by-side code changes report: 20.1.5_vs_20.2.0-rc1.

    1 /*
    2  * Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
    3  *
    4  * Permission is hereby granted, free of charge, to any person obtaining a
    5  * copy of this software and associated documentation files (the "Software"),
    6  * to deal in the Software without restriction, including without limitation
    7  * on the rights to use, copy, modify, merge, publish, distribute, sub
    8  * license, and/or sell copies of the Software, and to permit persons to whom
    9  * the Software is furnished to do so, subject to the following conditions:
   10  *
   11  * The above copyright notice and this permission notice (including the next
   12  * paragraph) shall be included in all copies or substantial portions of the
   13  * Software.
   14  *
   15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   17  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
   18  * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
   19  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
   20  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
   21  * USE OR OTHER DEALINGS IN THE SOFTWARE.
   22  */
   23 #ifndef R600_SHADER_H
   24 #define R600_SHADER_H
   25 
   26 #include "r600_asm.h"
   27 
   28 
   29 #ifdef __cplusplus
   30 extern "C" {
   31 #endif
   32 
   33 /* Valid shader configurations:
   34  *
   35  * API shaders       VS | TCS | TES | GS |pass| PS
   36  * are compiled as:     |     |     |    |thru|
   37  *                      |     |     |    |    |
   38  * Only VS & PS:     VS | --  | --  | -- | -- | PS
   39  * With GS:          ES | --  | --  | GS | VS | PS
   40  * With Tessel.:     LS | HS  | VS  | -- | -- | PS
   41  * With both:        LS | HS  | ES  | GS | VS | PS
   42  */
   43 
   44 struct r600_shader_io {
   45     unsigned        name;
   46     unsigned        gpr;
   47     unsigned        done;
   48     unsigned        sid;
   49     int         spi_sid;
   50     unsigned        interpolate;
   51     unsigned        ij_index;
   52     unsigned        interpolate_location; //  TGSI_INTERPOLATE_LOC_CENTER, CENTROID, SAMPLE
   53     unsigned        lds_pos; /* for evergreen */
   54     unsigned        back_color_input;
   55     unsigned        write_mask;
   56     int         ring_offset;
   57     unsigned        uses_interpolate_at_centroid;
   58 };
   59 
   60 struct r600_shader_atomic {
   61     unsigned start, end;
   62     unsigned buffer_id;
   63     unsigned hw_idx;
   64     unsigned array_id;
   65 };
   66 
   67 struct r600_shader {
   68     unsigned        processor_type;
   69     struct r600_bytecode        bc;
   70     unsigned        ninput;
   71     unsigned        noutput;
   72     unsigned                nhwatomic;
   73     unsigned        nlds;
   74     unsigned        nsys_inputs;
   75     struct r600_shader_io   input[PIPE_MAX_SHADER_INPUTS];
   76     struct r600_shader_io   output[PIPE_MAX_SHADER_OUTPUTS];
   77     struct r600_shader_atomic atomics[8];
   78     unsigned                nhwatomic_ranges;
   79     boolean         uses_kill;
   80     boolean         fs_write_all;
   81     boolean         two_side;
   82     boolean         needs_scratch_space;
   83     /* Number of color outputs in the TGSI shader,
   84      * sometimes it could be higher than nr_cbufs (bug?).
   85      * Also with writes_all property on eg+ it will be set to max CB number */
   86     unsigned        nr_ps_max_color_exports;
   87     /* Real number of ps color exports compiled in the bytecode */
   88     unsigned        nr_ps_color_exports;
   89     unsigned                ps_color_export_mask;
   90     unsigned                ps_export_highest;
   91     /* bit n is set if the shader writes gl_ClipDistance[n] */
   92     unsigned        cc_dist_mask;
   93     unsigned        clip_dist_write;
   94     unsigned                cull_dist_write;
   95     boolean         vs_position_window_space;
   96     /* flag is set if the shader writes VS_OUT_MISC_VEC (e.g. for PSIZE) */
   97     boolean         vs_out_misc_write;
   98     boolean         vs_out_point_size;
   99     boolean         vs_out_layer;
  100     boolean         vs_out_viewport;
  101     boolean         vs_out_edgeflag;
  102     boolean         has_txq_cube_array_z_comp;
  103     boolean         uses_tex_buffers;
  104     boolean                 gs_prim_id_input;
  105     boolean                 gs_tri_strip_adj_fix;
  106     uint8_t         ps_conservative_z;
  107 
  108     /* Size in bytes of a data item in the ring(s) (single vertex data).
  109        Stages with only one ring items 123 will be set to 0. */
  110     unsigned        ring_item_sizes[4];
  111 
  112     unsigned        indirect_files;
  113     unsigned        max_arrays;
  114     unsigned        num_arrays;
  115     unsigned        vs_as_es;
  116     unsigned        vs_as_ls;
  117     unsigned        vs_as_gs_a;
  118     unsigned                tes_as_es;
  119     unsigned                tcs_prim_mode;
  120     unsigned                ps_prim_id_input;
  121     struct r600_shader_array * arrays;
  122 
  123     boolean         uses_doubles;
  124     boolean                 uses_atomics;
  125     boolean         uses_images;
  126     boolean         uses_helper_invocation;
  127     uint8_t                 atomic_base;
  128     uint8_t         rat_base;
  129     uint8_t                 image_size_const_offset;
  130 };
  131 
  132 union r600_shader_key {
  133     struct {
  134         unsigned    nr_cbufs:4;
  135         unsigned        first_atomic_counter:4;
  136         unsigned        image_size_const_offset:5;
  137         unsigned    color_two_side:1;
  138         unsigned    alpha_to_one:1;
  139     } ps;
  140     struct {
  141         unsigned    prim_id_out:8;
  142         unsigned        first_atomic_counter:4;
  143         unsigned    as_es:1; /* export shader */
  144         unsigned    as_ls:1; /* local shader */
  145         unsigned    as_gs_a:1;
  146     } vs;
  147     struct {
  148         unsigned        first_atomic_counter:4;
  149         unsigned    as_es:1;
  150     } tes;
  151     struct {
  152         unsigned        first_atomic_counter:4;
  153         unsigned    prim_mode:3;
  154     } tcs;
  155     struct {
  156         unsigned        first_atomic_counter:4;
  157         unsigned        tri_strip_adj_fix:1;
  158     } gs;
  159 };
  160 
  161 struct r600_shader_array {
  162     unsigned gpr_start;
  163     unsigned gpr_count;
  164     unsigned comp_mask;
  165 };
  166 
  167 struct r600_pipe_shader {
  168     struct r600_pipe_shader_selector *selector;
  169     struct r600_pipe_shader *next_variant;
  170     /* for GS - corresponding copy shader (installed as VS) */
  171     struct r600_pipe_shader *gs_copy_shader;
  172     struct r600_shader  shader;
  173     struct r600_command_buffer command_buffer; /* register writes */
  174     struct r600_resource    *bo;
  175     unsigned        sprite_coord_enable;
  176     unsigned        flatshade;
  177     unsigned        pa_cl_vs_out_cntl;
  178     unsigned        nr_ps_color_outputs;
  179     unsigned                ps_color_export_mask;
  180     
  181     union r600_shader_key   key;
  182     unsigned        db_shader_control;
  183     unsigned        ps_depth_export;
  184     unsigned        enabled_stream_buffers_mask;
  185     unsigned        scratch_space_needed; /* size of scratch space (if > 0) counted in vec4 */
  186 };
  187 
  188 /* return the table index 0-5 for TGSI_INTERPOLATE_LINEAR/PERSPECTIVE and
  189  TGSI_INTERPOLATE_LOC_CENTER/SAMPLE/COUNT. Other input values return -1. */
  190 int eg_get_interpolator_index(unsigned interpolate, unsigned location);
  191 
  192 int r600_get_lds_unique_index(unsigned semantic_name, unsigned index, bool texcoord_semantics);
  193 
  194 int generate_gs_copy_shader(struct r600_context *rctx,
  195                             struct r600_pipe_shader *gs,
  196                             struct pipe_stream_output_info *so);
  197 
  198 #ifdef __cplusplus
  199 }  // extern "C"
  200 #endif
  201 
  202 
  203 #endif