13192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/**********************************************************
23192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Copyright 2008-2009 VMware, Inc.  All rights reserved.
33192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz *
43192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Permission is hereby granted, free of charge, to any person
53192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * obtaining a copy of this software and associated documentation
63192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * files (the "Software"), to deal in the Software without
73192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * restriction, including without limitation the rights to use, copy,
83192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * modify, merge, publish, distribute, sublicense, and/or sell copies
93192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * of the Software, and to permit persons to whom the Software is
103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * furnished to do so, subject to the following conditions:
113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz *
123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The above copyright notice and this permission notice shall be
133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * included in all copies or substantial portions of the Software.
143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz *
153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SOFTWARE.
233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz *
243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz **********************************************************/
253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#ifndef SVGA_SWTNL_PRIVATE_H
273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_SWTNL_PRIVATE_H
283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_swtnl.h"
303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "draw/draw_vertex.h"
313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_types.h"
333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga3d_reg.h"
343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/**
363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Primitive renderer for svga.
373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */
383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_vbuf_render {
393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   struct vbuf_render base;
403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   struct svga_context *svga;
423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   struct vertex_info vertex_info;
433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   unsigned vertex_size;
453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
46e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul   SVGA3dElementLayoutId layout_id; /**< current element layout id */
47e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul
48d21a309c6c00122b0562284d78fce5138fa2ad30Brian Paul   enum pipe_prim_type prim;
493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
50287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_resource *vbuf;
51287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_resource *ibuf;
52287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_transfer *vbuf_transfer;
53287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_transfer *ibuf_transfer;
543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
55e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul   void *vbuf_ptr;
56e054251ed11e25a080f64b92db9334c9b07c8c76Brian Paul
573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   /* current size of buffer */
583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   size_t vbuf_size;
593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   size_t ibuf_size;
603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   /* size of that the buffer should be */
623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   size_t vbuf_alloc_size;
633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   size_t ibuf_alloc_size;
643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   /* current write place */
663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   size_t vbuf_offset;
673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   size_t ibuf_offset;
683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   /* currently used */
703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   size_t vbuf_used;
713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   SVGA3dVertexDecl vdecl[PIPE_MAX_ATTRIBS];
733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   unsigned vdecl_offset;
743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   unsigned vdecl_count;
753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   ushort min_index;
773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   ushort max_index;
783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz};
793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/**
813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Basically a cast wrapper.
823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */
83a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct svga_vbuf_render *
843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzsvga_vbuf_render( struct vbuf_render *render )
853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{
863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   assert(render);
873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz   return (struct svga_vbuf_render *)render;
883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz}
893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct vbuf_render *
923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzsvga_vbuf_render_create( struct svga_context *svga );
933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
95e8f646fa7e9cf6f6793864384128157735aa03b3José Fonsecaenum pipe_error
963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzsvga_swtnl_update_vdecl( struct svga_context *svga );
973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz
993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#endif
100