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