1ce40e4726cf30196b87df387255c64ddc2a97638Christian König/* 2ce40e4726cf30196b87df387255c64ddc2a97638Christian König * Copyright 2012 Advanced Micro Devices, Inc. 3ce40e4726cf30196b87df387255c64ddc2a97638Christian König * 4ce40e4726cf30196b87df387255c64ddc2a97638Christian König * Permission is hereby granted, free of charge, to any person obtaining a 5ce40e4726cf30196b87df387255c64ddc2a97638Christian König * copy of this software and associated documentation files (the "Software"), 6ce40e4726cf30196b87df387255c64ddc2a97638Christian König * to deal in the Software without restriction, including without limitation 7ce40e4726cf30196b87df387255c64ddc2a97638Christian König * on the rights to use, copy, modify, merge, publish, distribute, sub 8ce40e4726cf30196b87df387255c64ddc2a97638Christian König * license, and/or sell copies of the Software, and to permit persons to whom 9ce40e4726cf30196b87df387255c64ddc2a97638Christian König * the Software is furnished to do so, subject to the following conditions: 10ce40e4726cf30196b87df387255c64ddc2a97638Christian König * 11ce40e4726cf30196b87df387255c64ddc2a97638Christian König * The above copyright notice and this permission notice (including the next 12ce40e4726cf30196b87df387255c64ddc2a97638Christian König * paragraph) shall be included in all copies or substantial portions of the 13ce40e4726cf30196b87df387255c64ddc2a97638Christian König * Software. 14ce40e4726cf30196b87df387255c64ddc2a97638Christian König * 15ce40e4726cf30196b87df387255c64ddc2a97638Christian König * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16ce40e4726cf30196b87df387255c64ddc2a97638Christian König * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17ce40e4726cf30196b87df387255c64ddc2a97638Christian König * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 18ce40e4726cf30196b87df387255c64ddc2a97638Christian König * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 19ce40e4726cf30196b87df387255c64ddc2a97638Christian König * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 20ce40e4726cf30196b87df387255c64ddc2a97638Christian König * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 21ce40e4726cf30196b87df387255c64ddc2a97638Christian König * USE OR OTHER DEALINGS IN THE SOFTWARE. 22ce40e4726cf30196b87df387255c64ddc2a97638Christian König * 23ce40e4726cf30196b87df387255c64ddc2a97638Christian König * Authors: 24ce40e4726cf30196b87df387255c64ddc2a97638Christian König * Tom Stellard <thomas.stellard@amd.com> 25ce40e4726cf30196b87df387255c64ddc2a97638Christian König * Michel Dänzer <michel.daenzer@amd.com> 26ce40e4726cf30196b87df387255c64ddc2a97638Christian König * Christian König <christian.koenig@amd.com> 27ce40e4726cf30196b87df387255c64ddc2a97638Christian König */ 28a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 29ce40e4726cf30196b87df387255c64ddc2a97638Christian König#ifndef RADEONSI_SHADER_H 30ce40e4726cf30196b87df387255c64ddc2a97638Christian König#define RADEONSI_SHADER_H 31a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 32ce40e4726cf30196b87df387255c64ddc2a97638Christian Königstruct si_shader_io { 33ce40e4726cf30196b87df387255c64ddc2a97638Christian König unsigned name; 34ce40e4726cf30196b87df387255c64ddc2a97638Christian König int sid; 35ce40e4726cf30196b87df387255c64ddc2a97638Christian König unsigned param_offset; 36ce40e4726cf30196b87df387255c64ddc2a97638Christian König unsigned interpolate; 37ce40e4726cf30196b87df387255c64ddc2a97638Christian König bool centroid; 38ce40e4726cf30196b87df387255c64ddc2a97638Christian König}; 39ce40e4726cf30196b87df387255c64ddc2a97638Christian König 40d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzerstruct si_pipe_shader; 41d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer 42d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzerstruct si_pipe_shader_selector { 43d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer struct si_pipe_shader *current; 44d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer 45d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer struct tgsi_token *tokens; 46d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer struct pipe_stream_output_info so; 47d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer 48d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer unsigned num_shaders; 49d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer 50d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer /* PIPE_SHADER_[VERTEX|FRAGMENT|...] */ 51d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer unsigned type; 52d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer 53d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer /* 1 when the shader contains 54d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer * TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS, otherwise it's 0. 55d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer * Used to determine whether we need to include nr_cbufs in the key */ 56d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer unsigned fs_write_all; 57d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer}; 58d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer 59ce40e4726cf30196b87df387255c64ddc2a97638Christian Königstruct si_shader { 60ce40e4726cf30196b87df387255c64ddc2a97638Christian König unsigned ninput; 61ce40e4726cf30196b87df387255c64ddc2a97638Christian König struct si_shader_io input[32]; 62ce40e4726cf30196b87df387255c64ddc2a97638Christian König 63ce40e4726cf30196b87df387255c64ddc2a97638Christian König unsigned noutput; 64ce40e4726cf30196b87df387255c64ddc2a97638Christian König struct si_shader_io output[32]; 65ce40e4726cf30196b87df387255c64ddc2a97638Christian König 66ce40e4726cf30196b87df387255c64ddc2a97638Christian König bool uses_kill; 67ce40e4726cf30196b87df387255c64ddc2a97638Christian König bool fs_write_all; 68ce40e4726cf30196b87df387255c64ddc2a97638Christian König unsigned nr_cbufs; 69ce40e4726cf30196b87df387255c64ddc2a97638Christian König}; 70ce40e4726cf30196b87df387255c64ddc2a97638Christian König 71ce40e4726cf30196b87df387255c64ddc2a97638Christian Königstruct si_pipe_shader { 72d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer struct si_pipe_shader_selector *selector; 73d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer struct si_pipe_shader *next_variant; 74ce40e4726cf30196b87df387255c64ddc2a97638Christian König struct si_shader shader; 75ce40e4726cf30196b87df387255c64ddc2a97638Christian König struct si_pm4_state *pm4; 76ce40e4726cf30196b87df387255c64ddc2a97638Christian König struct si_resource *bo; 77ce40e4726cf30196b87df387255c64ddc2a97638Christian König unsigned num_sgprs; 78ce40e4726cf30196b87df387255c64ddc2a97638Christian König unsigned num_vgprs; 79ce40e4726cf30196b87df387255c64ddc2a97638Christian König unsigned spi_ps_input_ena; 80ce40e4726cf30196b87df387255c64ddc2a97638Christian König unsigned sprite_coord_enable; 81ce40e4726cf30196b87df387255c64ddc2a97638Christian König unsigned so_strides[4]; 82d1e40b3d40b2e90ad4f275565f1ae27fe6f964ccMichel Dänzer unsigned key; 83ce40e4726cf30196b87df387255c64ddc2a97638Christian König}; 84ce40e4726cf30196b87df387255c64ddc2a97638Christian König 85ce40e4726cf30196b87df387255c64ddc2a97638Christian König/* radeonsi_shader.c */ 86ce40e4726cf30196b87df387255c64ddc2a97638Christian Königint si_pipe_shader_create(struct pipe_context *ctx, struct si_pipe_shader *shader); 87ce40e4726cf30196b87df387255c64ddc2a97638Christian Königvoid si_pipe_shader_destroy(struct pipe_context *ctx, struct si_pipe_shader *shader); 88ce40e4726cf30196b87df387255c64ddc2a97638Christian König 89ce40e4726cf30196b87df387255c64ddc2a97638Christian König#endif 90