172128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse/*
272128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
372128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse *
472128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * Permission is hereby granted, free of charge, to any person obtaining a
572128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * copy of this software and associated documentation files (the "Software"),
672128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * to deal in the Software without restriction, including without limitation
772128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * on the rights to use, copy, modify, merge, publish, distribute, sub
872128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * license, and/or sell copies of the Software, and to permit persons to whom
972128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * the Software is furnished to do so, subject to the following conditions:
1072128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse *
1172128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * The above copyright notice and this permission notice (including the next
1272128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * paragraph) shall be included in all copies or substantial portions of the
1372128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * Software.
1472128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse *
1572128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1672128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1772128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
1872128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
1972128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
2072128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
2172128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * USE OR OTHER DEALINGS IN THE SOFTWARE.
2272128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse */
2372128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse#ifndef R600_SHADER_H
2472128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse#define R600_SHADER_H
2572128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse
26de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse#include "r600_asm.h"
2772128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse
2872128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glissestruct r600_shader_io {
29de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned		name;
30de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned		gpr;
31c3ad060488ffd98f1c6dc9127b46324c5201f434Jerome Glisse	unsigned		done;
32de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	int			sid;
335b27b63de64167a84a03d820550e56c4b7bbc69dVadim Girlin	int			spi_sid;
3435e044ab562b65aa53f9d9d7b5885e6a887774bbJerome Glisse	unsigned		interpolate;
358a9f02c5d503089bdcc90ff934f6269e59356d52Dave Airlie	boolean                 centroid;
36fc6caef4cb67fb13642c5ebccee53019d1764df6Dave Airlie	unsigned		lds_pos; /* for evergreen */
3791d47296967ebfaf685f3870998ea0a1450ecf55Vadim Girlin	unsigned		write_mask;
3872128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse};
3972128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse
4072128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glissestruct r600_shader {
41de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned		processor_type;
424a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode		bc;
43de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned		ninput;
44de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned		noutput;
45fc6caef4cb67fb13642c5ebccee53019d1764df6Dave Airlie	unsigned		nlds;
46de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct r600_shader_io	input[32];
47de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct r600_shader_io	output[32];
48e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	boolean			uses_kill;
495555cd776b970bce020be59193054474a2a63317Dave Airlie	boolean			fs_write_all;
5091d47296967ebfaf685f3870998ea0a1450ecf55Vadim Girlin	boolean			vs_prohibit_ucps;
51725a820b926575265e6790601a0defd9c30947dcVadim Girlin	boolean			two_side;
520c47d9dcab80923c61b3f5375128e9b511b842fbVadim Girlin	/* Number of color outputs in the TGSI shader,
530c47d9dcab80923c61b3f5375128e9b511b842fbVadim Girlin	 * sometimes it could be higher than nr_cbufs (bug?).
540c47d9dcab80923c61b3f5375128e9b511b842fbVadim Girlin	 * Also with writes_all property on eg+ it will be set to max CB number */
550c47d9dcab80923c61b3f5375128e9b511b842fbVadim Girlin	unsigned		nr_ps_max_color_exports;
560c47d9dcab80923c61b3f5375128e9b511b842fbVadim Girlin	/* Real number of ps color exports compiled in the bytecode */
570c47d9dcab80923c61b3f5375128e9b511b842fbVadim Girlin	unsigned		nr_ps_color_exports;
5891d47296967ebfaf685f3870998ea0a1450ecf55Vadim Girlin	/* bit n is set if the shader writes gl_ClipDistance[n] */
5991d47296967ebfaf685f3870998ea0a1450ecf55Vadim Girlin	unsigned		clip_dist_write;
6091d47296967ebfaf685f3870998ea0a1450ecf55Vadim Girlin	/* flag is set if the shader writes VS_OUT_MISC_VEC (e.g. for PSIZE) */
6191d47296967ebfaf685f3870998ea0a1450ecf55Vadim Girlin	boolean			vs_out_misc_write;
62e3032a052321ea1fdfbca090618149ae1ed33911Marek Olšák	boolean			vs_out_point_size;
6372128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse};
6472128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse
6572128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse#endif
66