lp_setup.h revision cdc920a0
1/************************************************************************** 2 * 3 * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 4 * All Rights Reserved. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the 8 * "Software"), to deal in the Software without restriction, including 9 * without limitation the rights to use, copy, modify, merge, publish, 10 * distribute, sub license, and/or sell copies of the Software, and to 11 * permit persons to whom the Software is furnished to do so, subject to 12 * the following conditions: 13 * 14 * The above copyright notice and this permission notice (including the 15 * next paragraph) shall be included in all copies or substantial portions 16 * of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 * 26 **************************************************************************/ 27#ifndef LP_SETUP_H 28#define LP_SETUP_H 29 30#include "pipe/p_compiler.h" 31#include "lp_jit.h" 32 33struct draw_context; 34struct vertex_info; 35 36enum lp_interp { 37 LP_INTERP_CONSTANT, 38 LP_INTERP_LINEAR, 39 LP_INTERP_PERSPECTIVE, 40 LP_INTERP_POSITION, 41 LP_INTERP_FACING 42}; 43 44/* Describes how to generate all the fragment shader inputs from the 45 * the vertices passed into our triangle/line/point functions. 46 * 47 * Vertices are treated as an array of float[4] values, indexed by 48 * src_index. 49 */ 50struct lp_shader_input { 51 enum lp_interp interp; /* how to interpolate values */ 52 unsigned src_index; /* where to find values in incoming vertices */ 53}; 54 55struct pipe_texture; 56struct pipe_surface; 57struct pipe_buffer; 58struct pipe_blend_color; 59struct pipe_screen; 60struct pipe_framebuffer_state; 61struct lp_fragment_shader; 62struct lp_jit_context; 63 64struct setup_context * 65lp_setup_create( struct pipe_context *pipe, 66 struct draw_context *draw ); 67 68void 69lp_setup_clear(struct setup_context *setup, 70 const float *clear_color, 71 double clear_depth, 72 unsigned clear_stencil, 73 unsigned flags); 74 75struct pipe_fence_handle * 76lp_setup_fence( struct setup_context *setup ); 77 78 79void 80lp_setup_flush( struct setup_context *setup, 81 unsigned flags ); 82 83 84void 85lp_setup_bind_framebuffer( struct setup_context *setup, 86 const struct pipe_framebuffer_state *fb ); 87 88void 89lp_setup_set_triangle_state( struct setup_context *setup, 90 unsigned cullmode, 91 boolean front_is_ccw, 92 boolean scissor ); 93 94void 95lp_setup_set_fs_inputs( struct setup_context *setup, 96 const struct lp_shader_input *interp, 97 unsigned nr ); 98 99void 100lp_setup_set_fs_functions( struct setup_context *setup, 101 lp_jit_frag_func jit_function0, 102 lp_jit_frag_func jit_function1, 103 boolean opaque ); 104 105void 106lp_setup_set_fs_constants(struct setup_context *setup, 107 struct pipe_buffer *buffer); 108 109 110void 111lp_setup_set_alpha_ref_value( struct setup_context *setup, 112 float alpha_ref_value ); 113 114void 115lp_setup_set_blend_color( struct setup_context *setup, 116 const struct pipe_blend_color *blend_color ); 117 118void 119lp_setup_set_scissor( struct setup_context *setup, 120 const struct pipe_scissor_state *scissor ); 121 122void 123lp_setup_set_sampler_textures( struct setup_context *setup, 124 unsigned num, struct pipe_texture **texture); 125 126unsigned 127lp_setup_is_texture_referenced( const struct setup_context *setup, 128 const struct pipe_texture *texture ); 129 130void 131lp_setup_set_flatshade_first( struct setup_context *setup, 132 boolean flatshade_first ); 133 134void 135lp_setup_set_vertex_info( struct setup_context *setup, 136 struct vertex_info *info ); 137 138 139#endif 140