draw_context.h revision 4f024e0f642f4f743e4d051ec71c00e45bfd361f
1 2/************************************************************************** 3 * 4 * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 5 * All Rights Reserved. 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a 8 * copy of this software and associated documentation files (the 9 * "Software"), to deal in the Software without restriction, including 10 * without limitation the rights to use, copy, modify, merge, publish, 11 * distribute, sub license, and/or sell copies of the Software, and to 12 * permit persons to whom the Software is furnished to do so, subject to 13 * the following conditions: 14 * 15 * The above copyright notice and this permission notice (including the 16 * next paragraph) shall be included in all copies or substantial portions 17 * of the Software. 18 * 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 22 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 23 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 24 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 25 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 26 * 27 **************************************************************************/ 28 29/** 30 * \brief Public interface into the drawing module. 31 */ 32 33/* Authors: Keith Whitwell <keith@tungstengraphics.com> 34 */ 35 36 37#ifndef DRAW_CONTEXT_H 38#define DRAW_CONTEXT_H 39 40 41#include "pipe/p_state.h" 42 43struct pipe_context; 44struct draw_context; 45struct draw_stage; 46struct draw_vertex_shader; 47struct draw_geometry_shader; 48struct tgsi_sampler; 49 50#define DRAW_MAX_TEXTURE_LEVELS 13 /* 4K x 4K for now */ 51 52struct draw_context *draw_create( struct pipe_context *pipe ); 53 54void draw_destroy( struct draw_context *draw ); 55 56void draw_flush(struct draw_context *draw); 57 58void draw_set_viewport_state( struct draw_context *draw, 59 const struct pipe_viewport_state *viewport ); 60 61void draw_set_clip_state( struct draw_context *pipe, 62 const struct pipe_clip_state *clip ); 63 64void draw_set_rasterizer_state( struct draw_context *draw, 65 const struct pipe_rasterizer_state *raster, 66 void *rast_handle ); 67 68void draw_set_rasterize_stage( struct draw_context *draw, 69 struct draw_stage *stage ); 70 71void draw_wide_point_threshold(struct draw_context *draw, float threshold); 72 73void draw_wide_point_sprites(struct draw_context *draw, boolean draw_sprite); 74 75void draw_wide_line_threshold(struct draw_context *draw, float threshold); 76 77void draw_enable_line_stipple(struct draw_context *draw, boolean enable); 78 79void draw_enable_point_sprites(struct draw_context *draw, boolean enable); 80 81void draw_set_mrd(struct draw_context *draw, double mrd); 82 83boolean 84draw_install_aaline_stage(struct draw_context *draw, struct pipe_context *pipe); 85 86boolean 87draw_install_aapoint_stage(struct draw_context *draw, struct pipe_context *pipe); 88 89boolean 90draw_install_pstipple_stage(struct draw_context *draw, struct pipe_context *pipe); 91 92 93int 94draw_find_shader_output(const struct draw_context *draw, 95 uint semantic_name, uint semantic_index); 96 97uint 98draw_num_shader_outputs(const struct draw_context *draw); 99 100 101void 102draw_texture_samplers(struct draw_context *draw, 103 uint shader_type, 104 uint num_samplers, 105 struct tgsi_sampler **samplers); 106 107void 108draw_set_sampler_views(struct draw_context *draw, 109 struct pipe_sampler_view **views, 110 unsigned num); 111void 112draw_set_samplers(struct draw_context *draw, 113 struct pipe_sampler_state **samplers, 114 unsigned num); 115 116void 117draw_set_mapped_texture(struct draw_context *draw, 118 unsigned sampler_idx, 119 uint32_t width, uint32_t height, uint32_t depth, 120 uint32_t last_level, 121 uint32_t row_stride[DRAW_MAX_TEXTURE_LEVELS], 122 uint32_t img_stride[DRAW_MAX_TEXTURE_LEVELS], 123 const void *data[DRAW_MAX_TEXTURE_LEVELS]); 124 125 126/* 127 * Vertex shader functions 128 */ 129 130struct draw_vertex_shader * 131draw_create_vertex_shader(struct draw_context *draw, 132 const struct pipe_shader_state *shader); 133void draw_bind_vertex_shader(struct draw_context *draw, 134 struct draw_vertex_shader *dvs); 135void draw_delete_vertex_shader(struct draw_context *draw, 136 struct draw_vertex_shader *dvs); 137 138 139/* 140 * Geometry shader functions 141 */ 142struct draw_geometry_shader * 143draw_create_geometry_shader(struct draw_context *draw, 144 const struct pipe_shader_state *shader); 145void draw_bind_geometry_shader(struct draw_context *draw, 146 struct draw_geometry_shader *dvs); 147void draw_delete_geometry_shader(struct draw_context *draw, 148 struct draw_geometry_shader *dvs); 149 150 151/* 152 * Vertex data functions 153 */ 154 155void draw_set_vertex_buffers(struct draw_context *draw, 156 unsigned count, 157 const struct pipe_vertex_buffer *buffers); 158 159void draw_set_vertex_elements(struct draw_context *draw, 160 unsigned count, 161 const struct pipe_vertex_element *elements); 162 163void draw_set_index_buffer(struct draw_context *draw, 164 const struct pipe_index_buffer *ib); 165 166void draw_set_mapped_index_buffer(struct draw_context *draw, 167 const void *elements); 168 169void 170draw_set_mapped_element_buffer_range( struct draw_context *draw, 171 unsigned eltSize, 172 int eltBias, 173 unsigned min_index, 174 unsigned max_index, 175 const void *elements ); 176 177void draw_set_mapped_element_buffer( struct draw_context *draw, 178 unsigned eltSize, 179 int eltBias, 180 const void *elements ); 181 182void draw_set_mapped_vertex_buffer(struct draw_context *draw, 183 unsigned attr, const void *buffer); 184 185void 186draw_set_mapped_constant_buffer(struct draw_context *draw, 187 unsigned shader_type, 188 unsigned slot, 189 const void *buffer, 190 unsigned size); 191 192void 193draw_set_mapped_so_buffers(struct draw_context *draw, 194 void *buffers[PIPE_MAX_SO_BUFFERS], 195 unsigned num_buffers); 196void 197draw_set_so_state(struct draw_context *draw, 198 struct pipe_stream_output_state *state); 199 200 201/*********************************************************************** 202 * draw_pt.c 203 */ 204 205void draw_vbo(struct draw_context *draw, 206 const struct pipe_draw_info *info); 207 208void draw_arrays(struct draw_context *draw, unsigned prim, 209 unsigned start, unsigned count); 210 211void 212draw_arrays_instanced(struct draw_context *draw, 213 unsigned mode, 214 unsigned start, 215 unsigned count, 216 unsigned startInstance, 217 unsigned instanceCount); 218 219 220/******************************************************************************* 221 * Driver backend interface 222 */ 223struct vbuf_render; 224void draw_set_render( struct draw_context *draw, 225 struct vbuf_render *render ); 226 227void draw_set_driver_clipping( struct draw_context *draw, 228 boolean bypass_clipping ); 229 230void draw_set_force_passthrough( struct draw_context *draw, 231 boolean enable ); 232 233/******************************************************************************* 234 * Draw pipeline 235 */ 236boolean draw_need_pipeline(const struct draw_context *draw, 237 const struct pipe_rasterizer_state *rasterizer, 238 unsigned prim ); 239 240#endif /* DRAW_CONTEXT_H */ 241