Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5564 serge 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
 
28
/**
29
 * \file
30
 * Vertex buffer drawing stage.
31
 *
32
 * \author Keith Whitwell 
33
 * \author Jose Fonseca 
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 primitive_generated );
129
 
130
   /**
131
    * Called after all relevant statistics have been accumulated.
132
    */
133
   void (*pipeline_statistics)(
134
      struct vbuf_render *vbufr,
135
      const struct pipe_query_data_pipeline_statistics *stats );
136
};
137
 
138
 
139
 
140
struct draw_stage *
141
draw_vbuf_stage( struct draw_context *draw,
142
                 struct vbuf_render *render );
143
 
144
 
145
#endif /*DRAW_VBUF_H_*/