r600_shader.h revision af69d88d
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 28struct 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 int ring_offset; 41}; 42 43struct r600_shader { 44 unsigned processor_type; 45 struct r600_bytecode bc; 46 unsigned ninput; 47 unsigned noutput; 48 unsigned nlds; 49 struct r600_shader_io input[40]; 50 struct r600_shader_io output[40]; 51 boolean uses_kill; 52 boolean fs_write_all; 53 boolean two_side; 54 /* Number of color outputs in the TGSI shader, 55 * sometimes it could be higher than nr_cbufs (bug?). 56 * Also with writes_all property on eg+ it will be set to max CB number */ 57 unsigned nr_ps_max_color_exports; 58 /* Real number of ps color exports compiled in the bytecode */ 59 unsigned nr_ps_color_exports; 60 /* bit n is set if the shader writes gl_ClipDistance[n] */ 61 unsigned clip_dist_write; 62 boolean vs_position_window_space; 63 /* flag is set if the shader writes VS_OUT_MISC_VEC (e.g. for PSIZE) */ 64 boolean vs_out_misc_write; 65 boolean vs_out_point_size; 66 boolean vs_out_layer; 67 boolean vs_out_viewport; 68 boolean vs_out_edgeflag; 69 boolean has_txq_cube_array_z_comp; 70 boolean uses_tex_buffers; 71 boolean gs_prim_id_input; 72 73 /* geometry shader properties */ 74 unsigned gs_input_prim; 75 unsigned gs_output_prim; 76 unsigned gs_max_out_vertices; 77 /* size in bytes of a data item in the ring (single vertex data) */ 78 unsigned ring_item_size; 79 80 unsigned indirect_files; 81 unsigned max_arrays; 82 unsigned num_arrays; 83 unsigned vs_as_es; 84 struct r600_shader_array * arrays; 85}; 86 87struct r600_shader_key { 88 unsigned color_two_side:1; 89 unsigned alpha_to_one:1; 90 unsigned nr_cbufs:4; 91 unsigned vs_as_es:1; 92}; 93 94struct r600_shader_array { 95 unsigned gpr_start; 96 unsigned gpr_count; 97 unsigned comp_mask; 98}; 99 100struct r600_pipe_shader { 101 struct r600_pipe_shader_selector *selector; 102 struct r600_pipe_shader *next_variant; 103 /* for GS - corresponding copy shader (installed as VS) */ 104 struct r600_pipe_shader *gs_copy_shader; 105 struct r600_shader shader; 106 struct r600_command_buffer command_buffer; /* register writes */ 107 struct r600_resource *bo; 108 unsigned sprite_coord_enable; 109 unsigned flatshade; 110 unsigned pa_cl_vs_out_cntl; 111 unsigned nr_ps_color_outputs; 112 struct r600_shader_key key; 113 unsigned db_shader_control; 114 unsigned ps_depth_export; 115}; 116 117#endif 118