1 /************************************************************************** 2 * 3 * Copyright 2007 VMware, Inc. 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 VMWARE 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 33 struct draw_context; 34 struct vertex_info; 35 36 37 struct pipe_resource; 38 struct pipe_query; 39 struct pipe_surface; 40 struct pipe_blend_color; 41 struct pipe_screen; 42 struct pipe_framebuffer_state; 43 struct lp_fragment_shader_variant; 44 struct lp_jit_context; 45 struct llvmpipe_query; 46 struct pipe_fence_handle; 47 struct lp_setup_variant; 48 struct lp_setup_context; 49 50 void lp_setup_reset( struct lp_setup_context *setup ); 51 52 struct lp_setup_context * 53 lp_setup_create( struct pipe_context *pipe, 54 struct draw_context *draw ); 55 56 void 57 lp_setup_clear(struct lp_setup_context *setup, 58 const union pipe_color_union *clear_color, 59 double clear_depth, 60 unsigned clear_stencil, 61 unsigned flags); 62 63 64 65 void 66 lp_setup_flush( struct lp_setup_context *setup, 67 struct pipe_fence_handle **fence, 68 const char *reason); 69 70 71 void 72 lp_setup_bind_framebuffer( struct lp_setup_context *setup, 73 const struct pipe_framebuffer_state *fb ); 74 75 void 76 lp_setup_set_triangle_state( struct lp_setup_context *setup, 77 unsigned cullmode, 78 boolean front_is_ccw, 79 boolean scissor, 80 boolean half_pixel_center, 81 boolean bottom_edge_rule); 82 83 void 84 lp_setup_set_line_state( struct lp_setup_context *setup, 85 float line_width); 86 87 void 88 lp_setup_set_point_state( struct lp_setup_context *setup, 89 float point_size, 90 boolean point_size_per_vertex, 91 uint sprite_coord_enable, 92 uint sprite_coord_origin); 93 94 void 95 lp_setup_set_setup_variant( struct lp_setup_context *setup, 96 const struct lp_setup_variant *variant ); 97 98 void 99 lp_setup_set_fs_variant( struct lp_setup_context *setup, 100 struct lp_fragment_shader_variant *variant ); 101 102 void 103 lp_setup_set_fs_constants(struct lp_setup_context *setup, 104 unsigned num, 105 struct pipe_constant_buffer *buffers); 106 107 void 108 lp_setup_set_alpha_ref_value( struct lp_setup_context *setup, 109 float alpha_ref_value ); 110 111 void 112 lp_setup_set_stencil_ref_values( struct lp_setup_context *setup, 113 const ubyte refs[2] ); 114 115 void 116 lp_setup_set_blend_color( struct lp_setup_context *setup, 117 const struct pipe_blend_color *blend_color ); 118 119 void 120 lp_setup_set_scissors( struct lp_setup_context *setup, 121 const struct pipe_scissor_state *scissors ); 122 123 void 124 lp_setup_set_viewports(struct lp_setup_context *setup, 125 unsigned num_viewports, 126 const struct pipe_viewport_state *viewports); 127 128 void 129 lp_setup_set_fragment_sampler_views(struct lp_setup_context *setup, 130 unsigned num, 131 struct pipe_sampler_view **views); 132 133 void 134 lp_setup_set_fragment_sampler_state(struct lp_setup_context *setup, 135 unsigned num, 136 struct pipe_sampler_state **samplers); 137 138 unsigned 139 lp_setup_is_resource_referenced( const struct lp_setup_context *setup, 140 const struct pipe_resource *texture ); 141 142 void 143 lp_setup_set_flatshade_first( struct lp_setup_context *setup, 144 boolean flatshade_first ); 145 146 void 147 lp_setup_set_rasterizer_discard( struct lp_setup_context *setup, 148 boolean rasterizer_discard ); 149 150 void 151 lp_setup_set_vertex_info( struct lp_setup_context *setup, 152 struct vertex_info *info ); 153 154 void 155 lp_setup_begin_query(struct lp_setup_context *setup, 156 struct llvmpipe_query *pq); 157 158 void 159 lp_setup_end_query(struct lp_setup_context *setup, 160 struct llvmpipe_query *pq); 161 162 static inline unsigned 163 lp_clamp_viewport_idx(int idx) 164 { 165 return (PIPE_MAX_VIEWPORTS > idx && idx >= 0) ? idx : 0; 166 } 167 168 #endif 169