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