Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  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. struct r600_shader_io {
  29.         unsigned                name;
  30.         unsigned                gpr;
  31.         unsigned                done;
  32.         int                     sid;
  33.         int                     spi_sid;
  34.         unsigned                interpolate;
  35.         unsigned                ij_index;
  36.         boolean                 centroid;
  37.         unsigned                lds_pos; /* for evergreen */
  38.         unsigned                back_color_input;
  39.         unsigned                write_mask;
  40. };
  41.  
  42. struct r600_shader {
  43.         unsigned                processor_type;
  44.         struct r600_bytecode            bc;
  45.         unsigned                ninput;
  46.         unsigned                noutput;
  47.         unsigned                nlds;
  48.         struct r600_shader_io   input[40];
  49.         struct r600_shader_io   output[40];
  50.         boolean                 uses_kill;
  51.         boolean                 fs_write_all;
  52.         boolean                 two_side;
  53.         /* Number of color outputs in the TGSI shader,
  54.          * sometimes it could be higher than nr_cbufs (bug?).
  55.          * Also with writes_all property on eg+ it will be set to max CB number */
  56.         unsigned                nr_ps_max_color_exports;
  57.         /* Real number of ps color exports compiled in the bytecode */
  58.         unsigned                nr_ps_color_exports;
  59.         /* bit n is set if the shader writes gl_ClipDistance[n] */
  60.         unsigned                clip_dist_write;
  61.         /* flag is set if the shader writes VS_OUT_MISC_VEC (e.g. for PSIZE) */
  62.         boolean                 vs_out_misc_write;
  63.         boolean                 vs_out_point_size;
  64.         boolean                 has_txq_cube_array_z_comp;
  65.         boolean                 uses_tex_buffers;
  66.  
  67.         unsigned                indirect_files;
  68.         unsigned                max_arrays;
  69.         unsigned                num_arrays;
  70.         struct r600_shader_array * arrays;
  71. };
  72.  
  73. struct r600_shader_key {
  74.         unsigned color_two_side:1;
  75.         unsigned alpha_to_one:1;
  76.         unsigned nr_cbufs:4;
  77. };
  78.  
  79. struct r600_shader_array {
  80.         unsigned gpr_start;
  81.         unsigned gpr_count;
  82.         unsigned comp_mask;
  83. };
  84.  
  85. struct r600_pipe_shader {
  86.         struct r600_pipe_shader_selector *selector;
  87.         struct r600_pipe_shader *next_variant;
  88.         struct r600_shader      shader;
  89.         struct r600_command_buffer command_buffer; /* register writes */
  90.         struct r600_resource    *bo;
  91.         unsigned                sprite_coord_enable;
  92.         unsigned                flatshade;
  93.         unsigned                pa_cl_vs_out_cntl;
  94.         unsigned                nr_ps_color_outputs;
  95.         struct r600_shader_key  key;
  96.         unsigned                db_shader_control;
  97.         unsigned                ps_depth_export;
  98. };
  99.  
  100. #endif
  101.