Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5563 serge 1
/** \mainpage
2
 
3
  \section about About
4
 
5
  Gallium3D is Tungsten Graphics'
6
  new architecture for building 3D graphics drivers. Initially
7
  supporting Mesa and Linux graphics drivers, Gallium3D is designed to allow
8
  portability to all major operating systems and graphics interfaces.
9
 
10
  Compared to existing Linux graphics drivers, Gallium3D will:
11
 
12
  - Make drivers smaller and simpler.
13
    Current DRI drivers are rather complicated. They're large, contain
14
    duplicated code and are burdened with implementing many concepts tightly
15
    tied to the OpenGL 1.x/2.x API.
16
 
17
  - Model modern graphics hardware.
18
    The new driver architecture is an abstraction of modern graphics hardware,
19
    rather than an OpenGL->hardware translator. The new driver interface will
20
    assume the presence of programmable vertex/fragment shaders and flexible
21
    memory objects.
22
 
23
  - Support multiple graphics APIs.
24
    The OpenGL 3.0 API will be very different from OpenGL 1.x/2.x. We'd like a
25
    driver model that is API-neutral so that it's not tied to a specific
26
    graphics API.
27
 
28
  \section contents Contents
29
 
30
  - \ref overview
31
 
32
  - \ref statetracker
33
 
34
  - Pipe drivers:
35
    - \ref softpipe
36
    - \ref i915g
37
 
38
  - Winsys drivers:
39
    - X11 winsys driver (xm_winsys.c)
40
    - Intel DRI winsys driver (intel_context.h, intel_winsys_pipe.c)
41
 
42
  - Ancillary Modules:
43
    - \ref draw
44
    - \ref tgsi
45
      - LLVM TGSI backend (gallivm.h)
46
 
47
  - \ref callgraph
48
 
49
  \section external External documentation
50
 
51
  - Gallium3D's Architectural Overview
52
  - Technical Overview
53
  - Gallium3D talk from XDS 2007
54
 
55
*/
56
 
57
/** \page overview Overview
58
 
59
  The public interface of a Gallium3D driver is described by the p_context.h
60
  header file. The pipe_context structure is an abstract base class with
61
  methods for:
62
 
63
  - Setting rendering state (texture sampler state, vertex array info, drawing surfaces, etc.)
64
 
65
  - Setting shader state, using the TGSI binary shader representation.
66
 
67
  - Vertex array and indexed vertex array drawing.
68
 
69
  - Region (memory) management for textures, renderbuffers, vertex buffers, etc.
70
 
71
  - Hardware queries (number of texture units, max texture size, etc).
72
 
73
  The p_state.h header defines all the state objects (such as polygon
74
  rasterization options, blend modes, etc) and resources (drawing surfaces,
75
  textures, memory buffers). The pipe interface uses "constant state" objects.
76
  That is, state objects are created once and are immutable. State objects are
77
  put into effect by binding them. This allows Gallium3D drivers to create
78
  corresponding hardware state objects which can be quickly handled.
79
 
80
  The p_defines.h header defines numerous constants and tokens (blend modes,
81
  texture wrap modes, surface formats, etc.
82
 
83
  The p_winsys.h header defines the window system and OS facilities which
84
  Gallium3D drivers rely upon. For example, memory allocation is typically a
85
  service the OS provides while window size/position information is provided by
86
  the window system. Pipe drivers use the winsys interface to handle these
87
  things.
88
 
89
  By abstracting OS and window system services, pipe drivers are portable to
90
  other platforms (e.g. embedded devices).
91
*/
92
 
93
/** \page statetracker The State Tracker
94
 
95
  The state tracker is the piece which interfaces core Mesa to the Gallium3D
96
  interface. It's responsible for translating Mesa state (blend modes, texture
97
  state, etc) and drawing commands (like glDrawArrays and glDrawPixels) into
98
  pipe objects and operations.
99
 
100
  Traditional fixed-function OpenGL components (such as lighting and texture
101
  combining) are implemented with shaders. OpenGL commands such as glDrawPixels
102
  are translated into textured quadrilateral rendering. Basically, any
103
  rendering operation that isn't directly supported by modern graphics hardware
104
  is translated into a hardware-friendly form.
105
 
106
  Future state trackers will be created for OpenGL 3.0 and OpenGL-ES 2.x.
107
*/
108
 
109
/** \page softpipe Softpipe Driver
110
 
111
  The softpipe driver is a software implementation of the Gallium3D interface.
112
  It will be used as a reference implementation and as a fallback driver when a
113
  hardware driver isn't available. The softpipe driver will make extensive use
114
  of run-time code generation to efficiently execute vertex, fragment and
115
  rasterization operations.
116
 
117
  \sa sp_winsys.h
118
*/
119
 
120
/** \page i915g i915 Driver
121
 
122
  The i915 Gallium3D Driver is an initial hardware driver implementation within
123
  the Gallium3D driver architecture. We expect that once complete this driver
124
  will have equivalent functionality and performance to the current Mesa
125
  i915tex driver, but from a much smaller codebase.
126
 
127
  \sa i915_context.h
128
  \sa i915_winsys.h
129
*/
130
 
131
/** \page draw Draw Module
132
  The Draw module provides point/line/polygon rendering services such as
133
  vertex transformation, polygon culling and clipping. It will be used by
134
  drivers for hardware which lacks vertex transformation (such as the
135
  i915/i945). It may also be instantiated and used directly by the state
136
  tracker to implement some API functionality that doesn't map well to hardware
137
  capabilities.
138
 
139
  The interface of this module corresponds closely to the subset of the Gallium
140
  Driver Interface which is relevent to these steps in the pipeline. Specifically
141
  there are calls for:
142
 
143
  - Vertex shader constant state objects
144
  - Vertex buffer binding
145
  - Vertex element layout (vertex fetch) constant state objects
146
  - DrawArrays and DrawElements
147
  - Rasterizer constant state objects.
148
 
149
  The Draw module is effectively the part of \ref softpipe which is concerned with
150
  vertex processing, split off into a separate module so that it can be reused
151
  by drivers for rasterization-only hardware. As such it is also instantiated
152
  by the \ref i915g driver.
153
 
154
  Additionally, there are cases in the Mesa OpenGL state_tracker where it is
155
  required to obtain transformed vertices and yet it is anticipated that using
156
  hardware transformation even if available would reduce performance, usually
157
  because the setup costs or latency are prohibitive. For this reason the Mesa
158
  state_tracker also instantiates a copy of this module.
159
 
160
  \sa draw_context.h
161
*/
162
 
163
/** \page tgsi TGSI
164
 
165
  The TGSI module provides a universal representation of shaders and
166
  CPU-based execution of shaders. All Mesa vertex/fragment programs and shaders
167
  are translated into the TGSI representation before being passed to the
168
  driver. In turn, the driver will convert the TGSI instructions into
169
  GPU-specific instructions. For hardware that lacks vertex or fragment shader
170
  support, the TGSI's executor can be used. The TGSI executor includes support
171
  for SSE code generation. Support for other processors (such as Cell) will be
172
  added in the future.
173
 
174
  \sa tgsi_parse.h
175
  \sa TGSI specification
176
*/
177
 
178
/** \page callgraph Glxgears callgraph example
179
 
180
  Below is a call graph of the glxgears application together with the Gallium3D's softpipe reference driver.
181
 
182
  \htmlonly
183
  The functions in the graph below are clickable.
184
  \endhtmlonly
185
 
186
  \dot
187
digraph {
188
	graph [fontname=Arial, fontsize=10];
189
	node [fontcolor=white, fontname=Arial, style=filled, fontsize=10, shape=box];
190
	edge [fontname=Arial, fontsize=10];
191
	1 [color="#ff0000", URL="\ref main", label="main\n100.00% (0.68%)\n0"];
192
	1 -> 2 [color="#fe0400", fontcolor="#fe0400", label="99.32%\n1433"];
193
	2 [color="#fe0400", URL="\ref do_draw", label="do_draw\n99.32% (0.00%)\n1433"];
194
	2 -> 4 [color="#fa1201", fontcolor="#fa1201", label="96.67%\n4298"];
195
	2 -> 39 [color="#0d4f76", fontcolor="#0d4f76", label="2.45%\n1433"];
196
	3 [color="#fa1201", URL="\ref execute_list", label="execute_list\n96.67% (0.00%)\n4299"];
197
	3 -> 5 [color="#f91301", fontcolor="#f91301", label="96.38%\n17196"];
198
	4 [color="#fa1201", URL="\ref _mesa_CallList", label="_mesa_CallList\n96.67% (0.00%)\n4299"];
199
	4 -> 3 [color="#fa1201", fontcolor="#fa1201", label="96.67%\n4299"];
200
	5 [color="#f91301", URL="\ref vbo_save_playback_vertex_list", label="vbo_save_playback_vertex_list\n96.38% (0.10%)\n17196"];
201
	5 -> 6 [color="#f91501", fontcolor="#f91501", label="96.09%\n17196"];
202
	6 [color="#f91501", URL="\ref st_draw_vbo", label="st_draw_vbo\n96.09% (0.00%)\n17196"];
203
	6 -> 10 [color="#ec3f03", fontcolor="#ec3f03", label="87.48%\n30093"];
204
	6 -> 33 [color="#0d5f78", fontcolor="#0d5f78", label="3.72%\n34392"];
205
	6 -> 34 [color="#0d5f78", fontcolor="#0d5f78", label="3.72%\n34392"];
206
	6 -> 47 [color="#0d3a74", fontcolor="#0d3a74", label="1.17%\n17196"];
207
	7 [color="#f71d01", URL="\ref draw_do_flush", label="draw_do_flush\n94.52% (0.20%)\n101744"];
208
	7 -> 13 [color="#e74e04", fontcolor="#e74e04", label="84.25%\n1146400"];
209
	7 -> 8 [color="#0d7d6c", fontcolor="#0d7d6c", label="8.32%\n114640"];
210
	7 -> 46 [color="#0d4175", fontcolor="#0d4175", label="1.57%\n97444"];
211
	8 [color="#f32702", URL="\ref clip_tri", label="clip_tri\n92.37% (0.49%)\n1261040"];
212
	8 -> 9 [color="#f32a02", fontcolor="#f32a02", label="91.88%\n1261040"];
213
	9 [color="#f32a02", URL="\ref cull_tri", label="cull_tri\n91.88% (0.20%)\n1261040"];
214
	9 -> 15 [color="#e35d04", fontcolor="#e35d04", label="81.12%\n560810"];
215
	9 -> 12 [color="#0d805e", fontcolor="#0d805e", label="10.57%\n560810"];
216
	10 [color="#ec3f03", URL="\ref softpipe_draw_arrays", label="softpipe_draw_arrays\n87.48% (0.00%)\n30093"];
217
	10 -> 11 [color="#ec3f03", fontcolor="#ec3f03", label="87.48%\n30093"];
218
	11 [color="#ec3f03", URL="\ref softpipe_draw_elements", label="softpipe_draw_elements\n87.48% (0.10%)\n30093"];
219
	11 -> 17 [color="#cf9507", fontcolor="#cf9507", label="67.61%\n30093"];
220
	11 -> 27 [color="#0d844f", fontcolor="#0d844f", label="13.01%\n120372"];
221
	11 -> 36 [color="#0d5a77", fontcolor="#0d5a77", label="3.33%\n30093"];
222
	11 -> 23 [color="#0d5977", fontcolor="#0d5977", label="3.23%\n30093"];
223
	12 [color="#ea4703", URL="\ref flush_spans", label="flush_spans\n85.91% (4.60%)\n4586176"];
224
	12 -> 14 [color="#e35c04", fontcolor="#e35c04", label="81.31%\n15910811"];
225
	13 [color="#e74e04", URL="\ref flatshade_tri", label="flatshade_tri\n84.25% (0.29%)\n1146400"];
226
	13 -> 8 [color="#e75004", fontcolor="#e75004", label="83.95%\n1146400"];
227
	14 [color="#e35c04", URL="\ref shade_quad", label="shade_quad\n81.31% (7.73%)\n15910811"];
228
	14 -> 21 [color="#c0bb09", fontcolor="#c0bb09", label="57.24%\n13903725"];
229
	14 -> 26 [color="#0c883c", fontcolor="#0c883c", label="16.24%\n15910811"];
230
	15 [color="#e35d04", URL="\ref setup_tri", label="setup_tri\n81.12% (1.47%)\n560810"];
231
	15 -> 16 [color="#e06505", fontcolor="#e06505", label="79.26%\n1121620"];
232
	16 [color="#e06505", URL="\ref subtriangle", label="subtriangle\n79.26% (3.91%)\n1121620"];
233
	16 -> 12 [color="#da7606", fontcolor="#da7606", label="75.34%\n4025366"];
234
	17 [color="#cf9507", URL="\ref draw_arrays", label="draw_arrays\n67.61% (0.00%)\n30093"];
235
	17 -> 19 [color="#cf9607", fontcolor="#cf9607", label="67.42%\n630520"];
236
	18 [color="#cf9607", URL="\ref do_ef_triangle", label="do_ef_triangle\n67.42% (0.49%)\n1261040"];
237
	18 -> 20 [color="#ce9807", fontcolor="#ce9807", label="66.83%\n1261040"];
238
	19 [color="#cf9607", URL="\ref do_quad", label="do_quad\n67.42% (0.00%)\n630520"];
239
	19 -> 18 [color="#cf9607", fontcolor="#cf9607", label="67.42%\n1261040"];
240
	20 [color="#ce9807", URL="\ref get_queued_prim", label="get_queued_prim\n66.83% (0.10%)\n1261040"];
241
	20 -> 7 [color="#cd9907", fontcolor="#cd9907", label="66.54%\n71650"];
242
	21 [color="#c0bb09", URL="\ref depth_test_quad", label="depth_test_quad\n57.24% (1.08%)\n13903725"];
243
	21 -> 22 [color="#40a00b", fontcolor="#40a00b", label="34.54%\n13074127"];
244
	21 -> 24 [color="#0c8f1e", fontcolor="#0c8f1e", label="21.62%\n13903725"];
245
	22 [color="#40a00b", URL="\ref output_quad", label="output_quad\n34.54% (3.91%)\n13074127"];
246
	22 -> 25 [color="#0c8c2b", fontcolor="#0c8c2b", label="19.28%\n13074127"];
247
	22 -> 28 [color="#0d8159", fontcolor="#0d8159", label="11.35%\n7223435"];
248
	23 [color="#1c970c", URL="\ref draw_flush", label="draw_flush\n27.98% (0.00%)\n257944"];
249
	23 -> 7 [color="#1c970c", fontcolor="#1c970c", label="27.98%\n30093"];
250
	24 [color="#0c8f1e", URL="\ref sp_depth_test_quad", label="sp_depth_test_quad\n21.62% (16.14%)\n13903725"];
251
	24 -> 37 [color="#0d5977", fontcolor="#0d5977", label="3.23%\n13903725"];
252
	24 -> 44 [color="#0d4c76", fontcolor="#0d4c76", label="2.25%\n13903725"];
253
	25 [color="#0c8c2b", URL="\ref write_quad_f_swz", label="write_quad_f_swz\n19.28% (16.14%)\n13074127"];
254
	25 -> 38 [color="#0d5877", fontcolor="#0d5877", label="3.13%\n26148254"];
255
	26 [color="#0c883a", URL="\ref tgsi_exec_machine_init", label="tgsi_exec_machine_init\n16.73% (10.27%)\n16326381"];
256
	26 -> 30 [color="#0d6178", fontcolor="#0d6178", label="3.91%\n16326381"];
257
	26 -> 45 [color="#0d4475", fontcolor="#0d4475", label="1.76%\n16326381"];
258
	26 -> 52 [color="#0d3174", fontcolor="#0d3174", label="0.78%\n16326381"];
259
	27 [color="#0d844f", URL="\ref draw_set_mapped_vertex_buffer", label="draw_set_mapped_vertex_buffer\n13.01% (0.00%)\n120372"];
260
	27 -> 23 [color="#0d844f", fontcolor="#0d844f", label="13.01%\n120372"];
261
	28 [color="#0d8159", URL="\ref read_quad_f_swz", label="read_quad_f_swz\n11.35% (5.87%)\n7223435"];
262
	28 -> 29 [color="#0d737a", fontcolor="#0d737a", label="5.48%\n14446870"];
263
	29 [color="#0d737a", URL="\ref get_row_rgba", label="get_row_rgba\n5.48% (5.48%)\n14446870"];
264
	30 [color="#0d6178", URL="\ref tgsi_parse_init", label="tgsi_parse_init\n3.91% (3.52%)\n16326383"];
265
	31 [color="#0d5f78", URL="\ref draw_set_vertex_buffer", label="draw_set_vertex_buffer\n3.72% (0.00%)\n34392"];
266
	31 -> 23 [color="#0d5f78", fontcolor="#0d5f78", label="3.72%\n34392"];
267
	32 [color="#0d5f78", URL="\ref draw_set_vertex_element", label="draw_set_vertex_element\n3.72% (0.00%)\n34392"];
268
	32 -> 23 [color="#0d5f78", fontcolor="#0d5f78", label="3.72%\n34392"];
269
	33 [color="#0d5f78", URL="\ref softpipe_set_vertex_buffer", label="softpipe_set_vertex_buffer\n3.72% (0.00%)\n34392"];
270
	33 -> 31 [color="#0d5f78", fontcolor="#0d5f78", label="3.72%\n34392"];
271
	34 [color="#0d5f78", URL="\ref softpipe_set_vertex_element", label="softpipe_set_vertex_element\n3.72% (0.00%)\n34392"];
272
	34 -> 32 [color="#0d5f78", fontcolor="#0d5f78", label="3.72%\n34392"];
273
	35 [color="#0d5d77", URL="\ref __i686.get_pc_thunk.bx", label="__i686.get_pc_thunk.bx\n3.52% (3.52%)\n0"];
274
	36 [color="#0d5a77", URL="\ref draw_set_mapped_constant_buffer", label="draw_set_mapped_constant_buffer\n3.33% (0.10%)\n30093"];
275
	36 -> 23 [color="#0d5977", fontcolor="#0d5977", label="3.23%\n30093"];
276
	37 [color="#0d5977", URL="\ref s8z24_read_quad_z", label="s8z24_read_quad_z\n3.23% (3.23%)\n13903725"];
277
	38 [color="#0d5877", URL="\ref put_row_8R8G8B_ximage", label="put_row_8R8G8B_ximage\n3.13% (3.13%)\n26148254"];
278
	39 [color="#0d4f76", URL="\ref _mesa_Clear", label="_mesa_Clear\n2.45% (0.00%)\n1433"];
279
	39 -> 40 [color="#0d4f76", fontcolor="#0d4f76", label="2.45%\n1433"];
280
	40 [color="#0d4f76", URL="\ref st_clear", label="st_clear\n2.45% (0.00%)\n1433"];
281
	40 -> 41 [color="#0d4d76", fontcolor="#0d4d76", label="2.35%\n2866"];
282
	41 [color="#0d4d76", URL="\ref xmesa_clear", label="xmesa_clear\n2.35% (0.00%)\n2866"];
283
	41 -> 42 [color="#0d4c76", fontcolor="#0d4c76", label="2.25%\n1433"];
284
	42 [color="#0d4c76", URL="\ref softpipe_clear", label="softpipe_clear\n2.25% (0.00%)\n1433"];
285
	42 -> 43 [color="#0d4c76", fontcolor="#0d4c76", label="2.25%\n1433"];
286
	43 [color="#0d4c76", URL="\ref sp_region_fill", label="sp_region_fill\n2.25% (2.25%)\n1433"];
287
	44 [color="#0d4c76", URL="\ref s8z24_write_quad_z", label="s8z24_write_quad_z\n2.25% (2.25%)\n13903725"];
288
	45 [color="#0d4475", URL="\ref tgsi_parse_free", label="tgsi_parse_free\n1.76% (0.78%)\n16326383"];
289
	45 -> 49 [color="#0d3674", fontcolor="#0d3674", label="0.98%\n16326383"];
290
	46 [color="#0d4175", URL="\ref draw_vertex_shader_queue_flush", label="draw_vertex_shader_queue_flush\n1.57% (0.49%)\n97444"];
291
	46 -> 53 [color="#0d2f74", fontcolor="#0d2f74", label="0.68%\n415570"];
292
	46 -> 26 [color="#0d2973", fontcolor="#0d2973", label="0.49%\n415570"];
293
	47 [color="#0d3b74", URL="\ref st_validate_state", label="st_validate_state\n1.27% (0.00%)\n18629"];
294
	47 -> 48 [color="#0d3874", fontcolor="#0d3874", label="1.08%\n8599"];
295
	48 [color="#0d3874", URL="\ref update_raster_state", label="update_raster_state\n1.08% (0.10%)\n8599"];
296
	48 -> 51 [color="#0d3674", fontcolor="#0d3674", label="0.98%\n8599"];
297
	49 [color="#0d3674", URL="\ref tgsi_full_token_free", label="tgsi_full_token_free\n0.98% (0.98%)\n16326412"];
298
	50 [color="#0d3674", URL="\ref draw_set_rasterizer_state", label="draw_set_rasterizer_state\n0.98% (0.00%)\n8599"];
299
	50 -> 23 [color="#0d3674", fontcolor="#0d3674", label="0.98%\n8599"];
300
	51 [color="#0d3674", URL="\ref softpipe_bind_rasterizer_state", label="softpipe_bind_rasterizer_state\n0.98% (0.00%)\n8599"];
301
	51 -> 50 [color="#0d3674", fontcolor="#0d3674", label="0.98%\n8599"];
302
	52 [color="#0d3174", URL="\ref tgsi_align_128bit", label="tgsi_align_128bit\n0.78% (0.78%)\n16326381"];
303
	53 [color="#0d2f74", URL="\ref draw_vertex_fetch", label="draw_vertex_fetch\n0.68% (0.68%)\n415570"];
304
}
305
 
306
  \enddot
307
 
308
  The graph above was generated by the gprof2dot.py script.
309
*/