Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
  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 TUNGSTEN GRAPHICS 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.  
  28. /**
  29.  * \file
  30.  * Vertex buffer drawing stage.
  31.  *
  32.  * \author Keith Whitwell <keith@tungstengraphics.com>
  33.  * \author Jose Fonseca <jrfonsec@tungstengraphics.com>
  34.  */
  35.  
  36. #ifndef DRAW_VBUF_H_
  37. #define DRAW_VBUF_H_
  38.  
  39.  
  40. #include "pipe/p_compiler.h"
  41.  
  42.  
  43. struct pipe_rasterizer_state;
  44. struct draw_context;
  45. struct vertex_info;
  46. struct pipe_query_data_pipeline_statistics;
  47.  
  48.  
  49. /**
  50.  * Interface for hardware vertex buffer rendering.
  51.  */
  52. struct vbuf_render {
  53.  
  54.    /**
  55.     * Driver limits.  May be tuned lower to improve cache hits on
  56.     * index list.
  57.     */
  58.    unsigned max_indices;
  59.    unsigned max_vertex_buffer_bytes;
  60.  
  61.    /**
  62.     * Query if the hardware driver needs assistance for a particular
  63.     * combination of rasterizer state and primitive.
  64.     *
  65.     * Currently optional.
  66.     */
  67.    boolean (*need_pipeline)(const struct vbuf_render *render,
  68.                             const struct pipe_rasterizer_state *rasterizer,
  69.                             unsigned int prim );
  70.  
  71.  
  72.    /**
  73.     * Get the hardware vertex format.
  74.     *
  75.     * XXX: have this in draw_context instead?
  76.     */
  77.    const struct vertex_info *(*get_vertex_info)( struct vbuf_render * );
  78.          
  79.    /**
  80.     * Request a destination for vertices.
  81.     * Hardware renderers will use ttm memory, others will just malloc
  82.     * something.
  83.     */
  84.    boolean (*allocate_vertices)( struct vbuf_render *,
  85.                                  ushort vertex_size,
  86.                                  ushort nr_vertices );
  87.    
  88.    void *(*map_vertices)( struct vbuf_render * );
  89.    void (*unmap_vertices)( struct vbuf_render *,
  90.                            ushort min_index,
  91.                            ushort max_index );
  92.  
  93.    /**
  94.     * Notify the renderer of the current primitive when it changes.
  95.     * Must succeed for TRIANGLES, LINES and POINTS.  Other prims at
  96.     * the discretion of the driver, for the benefit of the passthrough
  97.     * path.
  98.     */
  99.    void (*set_primitive)( struct vbuf_render *, unsigned prim );
  100.  
  101.    /**
  102.     * Draw indexed primitives.  Note that indices are ushort.  The driver
  103.     * must complete this call, if necessary splitting the index list itself.
  104.     */
  105.    void (*draw_elements)( struct vbuf_render *,
  106.                           const ushort *indices,
  107.                           uint nr_indices );
  108.  
  109.    /* Draw non-indexed primitives.
  110.     */
  111.    void (*draw_arrays)( struct vbuf_render *,
  112.                         unsigned start,
  113.                         uint nr );
  114.  
  115.    /**
  116.     * Called when vbuf is done with this set of vertices:
  117.     */
  118.    void (*release_vertices)( struct vbuf_render * );
  119.  
  120.    void (*destroy)( struct vbuf_render * );
  121.  
  122.  
  123.    /**
  124.     * Called after writing data to the stream out buffers
  125.     */
  126.    void (*set_stream_output_info)( struct vbuf_render *vbufr,
  127.                                    unsigned primitive_count,
  128.                                    unsigned vertices_count,
  129.                                    unsigned primitive_generated );
  130.  
  131.    /**
  132.     * Called after all relevant statistics have been accumulated.
  133.     */
  134.    void (*pipeline_statistics)(
  135.       struct vbuf_render *vbufr,
  136.       const struct pipe_query_data_pipeline_statistics *stats );
  137. };
  138.  
  139.  
  140.  
  141. struct draw_stage *
  142. draw_vbuf_stage( struct draw_context *draw,
  143.                  struct vbuf_render *render );
  144.  
  145.  
  146. #endif /*DRAW_VBUF_H_*/
  147.