lp_setup.h revision 7ec681f3
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 boolean multisample); 83 84void 85lp_setup_set_line_state( struct lp_setup_context *setup, 86 float line_width, 87 boolean line_rectangular); 88 89void 90lp_setup_set_point_state( struct lp_setup_context *setup, 91 float point_size, 92 boolean point_tri_clip, 93 boolean point_size_per_vertex, 94 uint sprite_coord_enable, 95 uint sprite_coord_origin, 96 boolean point_quad_rasterization); 97 98void 99lp_setup_set_setup_variant( struct lp_setup_context *setup, 100 const struct lp_setup_variant *variant ); 101 102void 103lp_setup_set_fs_variant( struct lp_setup_context *setup, 104 struct lp_fragment_shader_variant *variant ); 105 106void 107lp_setup_set_fs_constants(struct lp_setup_context *setup, 108 unsigned num, 109 struct pipe_constant_buffer *buffers); 110 111void 112lp_setup_set_fs_ssbos(struct lp_setup_context *setup, 113 unsigned num, 114 struct pipe_shader_buffer *buffers); 115 116void 117lp_setup_set_fs_images(struct lp_setup_context *setup, 118 unsigned num, 119 struct pipe_image_view *images); 120 121void 122lp_setup_set_alpha_ref_value( struct lp_setup_context *setup, 123 float alpha_ref_value ); 124 125void 126lp_setup_set_stencil_ref_values( struct lp_setup_context *setup, 127 const ubyte refs[2] ); 128 129void 130lp_setup_set_blend_color( struct lp_setup_context *setup, 131 const struct pipe_blend_color *blend_color ); 132 133void 134lp_setup_set_scissors( struct lp_setup_context *setup, 135 const struct pipe_scissor_state *scissors ); 136 137void 138lp_setup_set_viewports(struct lp_setup_context *setup, 139 unsigned num_viewports, 140 const struct pipe_viewport_state *viewports); 141 142void 143lp_setup_set_fragment_sampler_views(struct lp_setup_context *setup, 144 unsigned num, 145 struct pipe_sampler_view **views); 146 147void 148lp_setup_set_fragment_sampler_state(struct lp_setup_context *setup, 149 unsigned num, 150 struct pipe_sampler_state **samplers); 151 152unsigned 153lp_setup_is_resource_referenced( const struct lp_setup_context *setup, 154 const struct pipe_resource *texture ); 155 156void 157lp_setup_set_sample_mask(struct lp_setup_context *setup, 158 uint32_t sample_mask); 159 160void 161lp_setup_set_flatshade_first( struct lp_setup_context *setup, 162 boolean flatshade_first ); 163 164void 165lp_setup_set_rasterizer_discard( struct lp_setup_context *setup, 166 boolean rasterizer_discard ); 167 168void 169lp_setup_set_vertex_info( struct lp_setup_context *setup, 170 struct vertex_info *info ); 171 172void 173lp_setup_set_linear_mode( struct lp_setup_context *setup, 174 boolean permit_linear_rasterizer ); 175 176void 177lp_setup_begin_query(struct lp_setup_context *setup, 178 struct llvmpipe_query *pq); 179 180void 181lp_setup_end_query(struct lp_setup_context *setup, 182 struct llvmpipe_query *pq); 183 184static inline unsigned 185lp_clamp_viewport_idx(int idx) 186{ 187 return (PIPE_MAX_VIEWPORTS > idx && idx >= 0) ? idx : 0; 188} 189 190#endif 191