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