11a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca/************************************************************************** 21a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * 31a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 41a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * All Rights Reserved. 51a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * 61a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 71a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * copy of this software and associated documentation files (the 81a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * "Software"), to deal in the Software without restriction, including 91a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * without limitation the rights to use, copy, modify, merge, publish, 101a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * distribute, sub license, and/or sell copies of the Software, and to 111a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * permit persons to whom the Software is furnished to do so, subject to 121a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * the following conditions: 131a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * 141a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * The above copyright notice and this permission notice (including the 151a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * next paragraph) shall be included in all copies or substantial portions 161a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * of the Software. 171a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * 181a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 191a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 201a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 211a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 221a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 231a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 241a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 251a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * 261a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca **************************************************************************/ 271a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 281a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca/** 291a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * \file 301a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * Vertex buffer drawing stage. 311a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * 321a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * \author Keith Whitwell <keith@tungstengraphics.com> 33395edbc5151b2ce9dd77a22d104ce886e9326354José Fonseca * \author Jose Fonseca <jrfonsec@tungstengraphics.com> 341a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca */ 351a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 361a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca#ifndef DRAW_VBUF_H_ 371a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca#define DRAW_VBUF_H_ 381a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 391a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 407844b4e730604e613a88f536c4aeee5c02d300fdJosé Fonseca#include "pipe/p_compiler.h" 417844b4e730604e613a88f536c4aeee5c02d300fdJosé Fonseca 421a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 43395edbc5151b2ce9dd77a22d104ce886e9326354José Fonsecastruct pipe_rasterizer_state; 441a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonsecastruct draw_context; 451a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonsecastruct vertex_info; 461a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 471a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 481a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca/** 491a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * Interface for hardware vertex buffer rendering. 501a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca */ 511a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonsecastruct vbuf_render { 521a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 531a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca /** 541a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * Driver limits. May be tuned lower to improve cache hits on 551a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * index list. 561a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca */ 571a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca unsigned max_indices; 581a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca unsigned max_vertex_buffer_bytes; 591a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 601a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca /** 61f5d4274b4a8effc70c238060c3728aea629663dfKeith Whitwell * Query if the hardware driver needs assistance for a particular 62f5d4274b4a8effc70c238060c3728aea629663dfKeith Whitwell * combination of rasterizer state and primitive. 63f5d4274b4a8effc70c238060c3728aea629663dfKeith Whitwell * 64f5d4274b4a8effc70c238060c3728aea629663dfKeith Whitwell * Currently optional. 65f5d4274b4a8effc70c238060c3728aea629663dfKeith Whitwell */ 66f5d4274b4a8effc70c238060c3728aea629663dfKeith Whitwell boolean (*need_pipeline)(const struct vbuf_render *render, 67f5d4274b4a8effc70c238060c3728aea629663dfKeith Whitwell const struct pipe_rasterizer_state *rasterizer, 68f5d4274b4a8effc70c238060c3728aea629663dfKeith Whitwell unsigned int prim ); 69f5d4274b4a8effc70c238060c3728aea629663dfKeith Whitwell 70f5d4274b4a8effc70c238060c3728aea629663dfKeith Whitwell 71f5d4274b4a8effc70c238060c3728aea629663dfKeith Whitwell /** 721a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * Get the hardware vertex format. 731a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * 741a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * XXX: have this in draw_context instead? 751a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca */ 761a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca const struct vertex_info *(*get_vertex_info)( struct vbuf_render * ); 771a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 781a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca /** 791a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * Request a destination for vertices. 801a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * Hardware renderers will use ttm memory, others will just malloc 811a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * something. 821a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca */ 83befa4ff50ec4728de70c04532f8c7342fbd70147Keith Whitwell boolean (*allocate_vertices)( struct vbuf_render *, 84befa4ff50ec4728de70c04532f8c7342fbd70147Keith Whitwell ushort vertex_size, 85befa4ff50ec4728de70c04532f8c7342fbd70147Keith Whitwell ushort nr_vertices ); 86befa4ff50ec4728de70c04532f8c7342fbd70147Keith Whitwell 87befa4ff50ec4728de70c04532f8c7342fbd70147Keith Whitwell void *(*map_vertices)( struct vbuf_render * ); 88befa4ff50ec4728de70c04532f8c7342fbd70147Keith Whitwell void (*unmap_vertices)( struct vbuf_render *, 89befa4ff50ec4728de70c04532f8c7342fbd70147Keith Whitwell ushort min_index, 90befa4ff50ec4728de70c04532f8c7342fbd70147Keith Whitwell ushort max_index ); 911a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 921a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca /** 931a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * Notify the renderer of the current primitive when it changes. 949425a702bef7d3f601e9ddc2b801f00a3d52dbb8Keith Whitwell * Must succeed for TRIANGLES, LINES and POINTS. Other prims at 959425a702bef7d3f601e9ddc2b801f00a3d52dbb8Keith Whitwell * the discretion of the driver, for the benefit of the passthrough 969425a702bef7d3f601e9ddc2b801f00a3d52dbb8Keith Whitwell * path. 971a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca */ 98488dd2c1912132fe7ee5e81b05fb64ba62a46098Brian Paul void (*set_primitive)( struct vbuf_render *, unsigned prim ); 991a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 1001a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca /** 101740e50c60f03d194aafab93d5251699964800979Brian Paul * Draw indexed primitives. Note that indices are ushort. The driver 102740e50c60f03d194aafab93d5251699964800979Brian Paul * must complete this call, if necessary splitting the index list itself. 1031a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca */ 104740e50c60f03d194aafab93d5251699964800979Brian Paul void (*draw_elements)( struct vbuf_render *, 105740e50c60f03d194aafab93d5251699964800979Brian Paul const ushort *indices, 106740e50c60f03d194aafab93d5251699964800979Brian Paul uint nr_indices ); 1071a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 108740e50c60f03d194aafab93d5251699964800979Brian Paul /* Draw non-indexed primitives. 109297b3be25a7f097fb9b1a79e332acddc12dcc3feKeith Whitwell */ 110297b3be25a7f097fb9b1a79e332acddc12dcc3feKeith Whitwell void (*draw_arrays)( struct vbuf_render *, 111297b3be25a7f097fb9b1a79e332acddc12dcc3feKeith Whitwell unsigned start, 112297b3be25a7f097fb9b1a79e332acddc12dcc3feKeith Whitwell uint nr ); 113297b3be25a7f097fb9b1a79e332acddc12dcc3feKeith Whitwell 1141a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca /** 1151a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca * Called when vbuf is done with this set of vertices: 1161a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca */ 117befa4ff50ec4728de70c04532f8c7342fbd70147Keith Whitwell void (*release_vertices)( struct vbuf_render * ); 1181a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 1191a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca void (*destroy)( struct vbuf_render * ); 1202c22b8e61dc4adab658c6198feea30c006aa6c58Zack Rusin 1212c22b8e61dc4adab658c6198feea30c006aa6c58Zack Rusin 1222c22b8e61dc4adab658c6198feea30c006aa6c58Zack Rusin /** 1232c22b8e61dc4adab658c6198feea30c006aa6c58Zack Rusin * Called after writing data to the stream out buffers 1242c22b8e61dc4adab658c6198feea30c006aa6c58Zack Rusin */ 1252c22b8e61dc4adab658c6198feea30c006aa6c58Zack Rusin void (*set_stream_output_info)( struct vbuf_render *vbufr, 126287531772ccea82c8a6c4dab5656d751a8943524Zack Rusin unsigned primitive_count, 127ec8cbd79ac4065111365a6720c9564de56855cc8Dave Airlie unsigned vertices_count, 128ec8cbd79ac4065111365a6720c9564de56855cc8Dave Airlie unsigned primitive_generated ); 1291a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca}; 1301a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 1311a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 1321a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 1331a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonsecastruct draw_stage * 1341a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonsecadraw_vbuf_stage( struct draw_context *draw, 1351a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca struct vbuf_render *render ); 1361a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 1371a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca 1381a8daf0627dde44aaa7c40786782618d4d5a6a36José Fonseca#endif /*DRAW_VBUF_H_*/ 139