mesa.git
16 years agoMerge remote branch 'upstream/gallium-0.1' into nouveau-gallium-0.1
Ben Skeggs [Sun, 30 Mar 2008 09:58:03 +0000 (19:58 +1000)]
Merge remote branch 'upstream/gallium-0.1' into nouveau-gallium-0.1

16 years agonv40: vp 1/0/- swz
Ben Skeggs [Sun, 30 Mar 2008 09:08:59 +0000 (19:08 +1000)]
nv40: vp 1/0/- swz

16 years agonv40: vp const/immd fix
Ben Skeggs [Sun, 30 Mar 2008 09:00:07 +0000 (19:00 +1000)]
nv40: vp const/immd fix

16 years agogallium: Set vertex state/buffers en-mass.
Brian Paul [Sat, 29 Mar 2008 13:41:03 +0000 (14:41 +0100)]
gallium: Set vertex state/buffers en-mass.

16 years agogallium: Fix some MSVC warnings.
José Fonseca [Tue, 25 Mar 2008 17:30:34 +0000 (17:30 +0000)]
gallium: Fix some MSVC warnings.

16 years agogallium: begin some bounding box code for bitmap cache
Brian [Sat, 29 Mar 2008 00:41:10 +0000 (18:41 -0600)]
gallium: begin some bounding box code for bitmap cache

16 years agogallium: added an (int) cast in setup_bitmap_vertex_data() to fix a signed/unsigned...
Brian [Sat, 29 Mar 2008 00:18:55 +0000 (18:18 -0600)]
gallium: added an (int) cast in setup_bitmap_vertex_data() to fix a signed/unsigned arithmetic problem

Negative values became very large uints.

16 years agogallium: Fix computation of Z values when not using early Z.
Brian [Fri, 28 Mar 2008 21:22:34 +0000 (15:22 -0600)]
gallium: Fix computation of Z values when not using early Z.

This fixes the missing bitmaps in the engine and fogcoord demos.

16 years agogallium: don't call st_flush_bitmap_cache() if the only change is _NEW_PACKUNPACK...
Brian [Fri, 28 Mar 2008 21:17:50 +0000 (15:17 -0600)]
gallium: don't call st_flush_bitmap_cache() if the only change is _NEW_PACKUNPACK state

16 years agogallium: disable a debug hack
Brian [Fri, 28 Mar 2008 20:56:05 +0000 (14:56 -0600)]
gallium: disable a debug hack

16 years agogallium: implement a glBitmap cache
Brian [Fri, 28 Mar 2008 20:53:47 +0000 (14:53 -0600)]
gallium: implement a glBitmap cache

The bitmap cache attempts to accumulate a series of glBitmap calls in a
buffer to effectively render a whole bunch of bitmaps at once.

The cache can be disabled, if needed, by setting UseBitmapCache=GL_FALSE.

16 years agomesa: fix texture/renderbuffer mix-up in test_attachment_completeness()
Brian Paul [Fri, 28 Mar 2008 19:10:16 +0000 (13:10 -0600)]
mesa: fix texture/renderbuffer mix-up in test_attachment_completeness()

16 years agogallium: re-work texture format selection code
Brian Paul [Fri, 28 Mar 2008 19:09:19 +0000 (13:09 -0600)]
gallium: re-work texture format selection code

Use same code for choosing texture format and renderbuffer format.

16 years agogallium: remove redundant compare bit in sampler state
Roland Scheidegger [Fri, 28 Mar 2008 14:43:00 +0000 (15:43 +0100)]
gallium: remove redundant compare bit in sampler state

16 years agogallium: Bump PIPE_MAX_SAMPLERS to 16.
Michal Krol [Fri, 28 Mar 2008 11:31:35 +0000 (12:31 +0100)]
gallium: Bump PIPE_MAX_SAMPLERS to 16.

We need it to fulfil D3D minimum requirements.

16 years agoIf visual is 32bpp, set visual->alphaBits = 8.
Brian [Fri, 28 Mar 2008 03:11:45 +0000 (21:11 -0600)]
If visual is 32bpp, set visual->alphaBits = 8.

This works since we always use XImages for color buffers.  It wouldn't always
work for Windows/Pixmaps.

16 years agogallium: replace PIPE_ATTRIB_MAX with PIPE_MAX_ATTRIBS
Brian [Thu, 27 Mar 2008 23:41:55 +0000 (17:41 -0600)]
gallium: replace PIPE_ATTRIB_MAX with PIPE_MAX_ATTRIBS

The later follows the naming scheme of other limits.
Keep the old definition until all possible usage is updated.

16 years agogallium: updated/improved comments, minor re-formatting
Brian Paul [Thu, 27 Mar 2008 23:18:25 +0000 (17:18 -0600)]
gallium: updated/improved comments, minor re-formatting

16 years agoconsolidate some parsing functions that were pretty much identical for vertex/fragmen...
Brian [Thu, 27 Mar 2008 22:19:46 +0000 (16:19 -0600)]
consolidate some parsing functions that were pretty much identical for vertex/fragment programs

cherry-picked from master

16 years agomesa: misc sync-up with master
Brian [Thu, 27 Mar 2008 22:05:40 +0000 (16:05 -0600)]
mesa: misc sync-up with master

16 years agoraise GL_INVALID_OPERATION if glProgramString compilation fails
Brian [Thu, 27 Mar 2008 22:04:20 +0000 (16:04 -0600)]
raise GL_INVALID_OPERATION if glProgramString compilation fails

cherry-picked from master

16 years agoFix the compile of disabled DEBUG_PARSING code.
Brian [Thu, 27 Mar 2008 21:54:44 +0000 (15:54 -0600)]
Fix the compile of disabled DEBUG_PARSING code.

cherry-picked from master

16 years agomake sure state token values are fully initialized
Brian [Thu, 27 Mar 2008 21:52:00 +0000 (15:52 -0600)]
make sure state token values are fully initialized

cherry-picked from master

16 years agoadded program_error2() function for better error reporting
Brian [Thu, 27 Mar 2008 21:51:07 +0000 (15:51 -0600)]
added program_error2() function for better error reporting

cherry-picked from master

16 years agoFix state.texgen parsing error (bug 12313).
Brian [Thu, 27 Mar 2008 21:48:54 +0000 (15:48 -0600)]
Fix state.texgen parsing error (bug 12313).

Replace *(*inst++) with *(*inst)++ in a few places.

Cherry-picked from master.

16 years agogallium: Update calls to the simple shader functions
Brian [Thu, 27 Mar 2008 21:42:52 +0000 (15:42 -0600)]
gallium: Update calls to the simple shader functions

16 years agogallium: return pipe_shader_state from the simple shader functions
Brian [Thu, 27 Mar 2008 21:42:09 +0000 (15:42 -0600)]
gallium: return pipe_shader_state from the simple shader functions

Allows us to fix a mem leak (tokens array).

16 years agogallium: fix Element() macro redefinition warning
Brian [Thu, 27 Mar 2008 21:41:52 +0000 (15:41 -0600)]
gallium: fix Element() macro redefinition warning

16 years agogallium: fix incorrect types for shaders
Brian [Thu, 27 Mar 2008 21:35:25 +0000 (15:35 -0600)]
gallium: fix incorrect types for shaders

16 years agogallium: remove temporary static var
Brian [Thu, 27 Mar 2008 21:33:47 +0000 (15:33 -0600)]
gallium: remove temporary static var

16 years agogallium: silence unused var warning
Brian [Thu, 27 Mar 2008 21:27:31 +0000 (15:27 -0600)]
gallium: silence unused var warning

16 years agocell: include cell_state_per_fragment.h to silence warning
Brian [Thu, 27 Mar 2008 21:27:14 +0000 (15:27 -0600)]
cell: include cell_state_per_fragment.h to silence warning

16 years agocell: added (uint64_t) cast to silence warning
Brian [Thu, 27 Mar 2008 21:26:54 +0000 (15:26 -0600)]
cell: added (uint64_t) cast to silence warning

16 years agocell: fix unclosed comment
Brian [Thu, 27 Mar 2008 21:26:22 +0000 (15:26 -0600)]
cell: fix unclosed comment

16 years agoxlib: Fix build error from recent fence changes
Ian Romanick [Wed, 26 Mar 2008 17:52:08 +0000 (10:52 -0700)]
xlib: Fix build error from recent fence changes

16 years agocell: Implement code-gen for logic op
Ian Romanick [Wed, 26 Mar 2008 17:45:32 +0000 (10:45 -0700)]
cell: Implement code-gen for logic op

This also implements code-gen for the float-to-packed color
conversion.  It's currently hardcoded for A8R8G8B8, but that can
easily be fixed as soon as other color depths are supported by the
Cell driver.

16 years agogallium: need to call st_validate_state() in Bitmap()
Brian Paul [Wed, 26 Mar 2008 15:02:54 +0000 (09:02 -0600)]
gallium: need to call st_validate_state() in Bitmap()

16 years agogallium: as for aapoints, make the extra texcoord per-shader state
Brian Paul [Wed, 26 Mar 2008 14:21:17 +0000 (08:21 -0600)]
gallium: as for aapoints, make the extra texcoord per-shader state

16 years agogallium: Change pipe->flush() interface to optionally return a fence.
Michel Dänzer [Wed, 26 Mar 2008 09:36:40 +0000 (09:36 +0000)]
gallium: Change pipe->flush() interface to optionally return a fence.

The cell driver still uses an internal CELL_FLUSH_WAIT flag, in the long run
proper fencing should be implemented for it.

16 years agogallium: the generic attrib we use for computing coverage is per-shader
Brian [Wed, 26 Mar 2008 01:19:14 +0000 (19:19 -0600)]
gallium: the generic attrib we use for computing coverage is per-shader

Fixes a very tricky conformance failure.

16 years agogallium: added fragment emit/write debug counters
Brian [Wed, 26 Mar 2008 01:18:56 +0000 (19:18 -0600)]
gallium: added fragment emit/write debug counters

16 years agocell: Enable MIT-SHM on Cell.
Ian Romanick [Wed, 26 Mar 2008 01:15:34 +0000 (18:15 -0700)]
cell: Enable MIT-SHM on Cell.

16 years agoxlib: Add support for MIT-SHM in xlib winsys driver
Ian Romanick [Wed, 26 Mar 2008 01:07:56 +0000 (18:07 -0700)]
xlib: Add support for MIT-SHM in xlib winsys driver

Gives about a 3% performance increase in gears on x86-64 (non-tiled)
and about 10% performance increase in gears on Cell (tiled).  I
actually expected more of a boost. :(

16 years agocell: Float convert-to and convert-from instructions use different shift bias
Ian Romanick [Mon, 24 Mar 2008 19:15:59 +0000 (12:15 -0700)]
cell: Float convert-to and convert-from instructions use different shift bias

16 years agodraw: Take flatshade_first rasterizer bit into account.
Michal Krol [Tue, 25 Mar 2008 22:49:11 +0000 (23:49 +0100)]
draw: Take flatshade_first rasterizer bit into account.

16 years agogallium: Introduce flatshade_first field to rasterizer_state.
Michal Krol [Tue, 25 Mar 2008 22:48:30 +0000 (23:48 +0100)]
gallium: Introduce flatshade_first field to rasterizer_state.

This bit tells us which vertex of the primitive is used to
propagate color for the remaining vertices if flatshade mode.

16 years agogallium: disable the selection/feedback draw module's options for wide lines, points...
Brian Paul [Tue, 25 Mar 2008 20:12:55 +0000 (14:12 -0600)]
gallium: disable the selection/feedback draw module's options for wide lines, points, etc.

Disable paths that would convert points/lines to tris as that upsets selection,
feedback, rastpos.

16 years agogallium: added some debug code (disable)
Brian Paul [Tue, 25 Mar 2008 18:27:48 +0000 (12:27 -0600)]
gallium: added some debug code (disable)

16 years agomesa: fix some issues in _mesa_combine_programs()
Brian Paul [Tue, 25 Mar 2008 18:27:32 +0000 (12:27 -0600)]
mesa: fix some issues in _mesa_combine_programs()

Use a temporay register to connect outputs of first program to inputs of
second program.
Also, fix bug in replace_registers(): didn't search/replace DstReg.

16 years agodraw: vertex fetch can be validated too early leading to an assertion... disable
Keith Whitwell [Tue, 25 Mar 2008 18:15:58 +0000 (18:15 +0000)]
draw: vertex fetch can be validated too early leading to an assertion... disable

16 years agodraw: don't use fetch_and_store for bypass_vs mode, it's not quite right
Keith Whitwell [Tue, 25 Mar 2008 18:09:25 +0000 (18:09 +0000)]
draw: don't use fetch_and_store for bypass_vs mode, it's not quite right

16 years agomesa: append fog instructions after parsing if a fog option is set
Brian Paul [Tue, 25 Mar 2008 17:32:31 +0000 (11:32 -0600)]
mesa: append fog instructions after parsing if a fog option is set

Drivers don't have to worry about it then.

16 years agomesa: when negating scalar src args, use NEGATE_XYZW, not NEGATE_X
Brian Paul [Tue, 25 Mar 2008 17:22:57 +0000 (11:22 -0600)]
mesa: when negating scalar src args, use NEGATE_XYZW, not NEGATE_X

This makes things easier on the back-end when generating GPU code.

16 years agoFix typo
José Fonseca [Tue, 25 Mar 2008 17:47:39 +0000 (17:47 +0000)]
Fix typo

16 years agodraw: take primitive into account when deciding if the pipeline is active
Keith Whitwell [Tue, 25 Mar 2008 15:17:53 +0000 (15:17 +0000)]
draw: take primitive into account when deciding if the pipeline is active

16 years agogallium: Use debug_get_option for GETENV
José Fonseca [Tue, 25 Mar 2008 11:37:54 +0000 (11:37 +0000)]
gallium: Use debug_get_option for GETENV

16 years agogallium: Fix default option on Windows.
José Fonseca [Tue, 25 Mar 2008 11:37:24 +0000 (11:37 +0000)]
gallium: Fix default option on Windows.

16 years agogallium: don't enable stencil test if no stencil buffer.
Brian Paul [Tue, 25 Mar 2008 01:59:59 +0000 (19:59 -0600)]
gallium: don't enable stencil test if no stencil buffer.

Also, if not doing two-sided stencil, set back-face state = front-face state.

16 years agonv40: respect do_flip in surface_copy()
Ben Skeggs [Tue, 25 Mar 2008 01:57:36 +0000 (12:57 +1100)]
nv40: respect do_flip in surface_copy()

16 years agogallium: be smarter about picking the sampler unit for pstipple, aaalines
Brian [Tue, 25 Mar 2008 01:36:44 +0000 (19:36 -0600)]
gallium: be smarter about picking the sampler unit for pstipple, aaalines

Also, if the app really uses all available sampler/texture units, don't just
die.  Just use the last sampler for the pstipple or aaline texture.

16 years agoMerge remote branch 'upstream/gallium-0.1' into nouveau-gallium-0.1
Ben Skeggs [Tue, 25 Mar 2008 01:14:49 +0000 (12:14 +1100)]
Merge remote branch 'upstream/gallium-0.1' into nouveau-gallium-0.1

16 years agonouveau: refcount buffers on validate list.
Ben Skeggs [Tue, 25 Mar 2008 01:12:26 +0000 (12:12 +1100)]
nouveau: refcount buffers on validate list.

16 years agogallium: fix a few bugs, warnings in the p_debug code
Brian [Tue, 25 Mar 2008 00:49:56 +0000 (18:49 -0600)]
gallium: fix a few bugs, warnings in the p_debug code

added missing _ to a _debug_printf() call.

16 years agogallium: move sampler_unit field to pstip_fragment_shader since it's per-shader
Brian [Tue, 25 Mar 2008 00:32:48 +0000 (18:32 -0600)]
gallium: move sampler_unit field to pstip_fragment_shader since it's per-shader

Also, fix another texture refcounting bug.

16 years agogallium: save/restore samplers in draw_textured_quad()
Brian [Tue, 25 Mar 2008 00:31:01 +0000 (18:31 -0600)]
gallium: save/restore samplers in draw_textured_quad()

16 years agomesa: call glutDestroyWindow (help find mem leaks)
Brian Paul [Mon, 24 Mar 2008 23:20:52 +0000 (17:20 -0600)]
mesa: call glutDestroyWindow (help find mem leaks)

16 years agogallium: fix a few texture border/mipmap glitches found w/ conform
Brian Paul [Mon, 24 Mar 2008 23:20:22 +0000 (17:20 -0600)]
gallium: fix a few texture border/mipmap glitches found w/ conform

16 years agogallium: check SamplersUsed to determine if texture needed, as in st_atom_sampler.c
Brian Paul [Mon, 24 Mar 2008 18:59:54 +0000 (12:59 -0600)]
gallium: check SamplersUsed to determine if texture needed, as in st_atom_sampler.c

Otherwise, we were sometimes setting texture state but not the corresponding
sampler state.

16 years agogallium: make a copy of the vertex shader's token array.
Brian [Mon, 24 Mar 2008 22:31:15 +0000 (16:31 -0600)]
gallium: make a copy of the vertex shader's token array.

This solves problems when the state tracker frees the token array when the
draw module still needs it.

16 years agogallium: use pipe_texture_reference() in a few places (fixes refcounting bugs)
Brian [Mon, 24 Mar 2008 22:26:45 +0000 (16:26 -0600)]
gallium: use pipe_texture_reference() in a few places (fixes refcounting bugs)

16 years agogallium: added tgsi_num_tokens() function to return number of tokens in token array.
Brian [Mon, 24 Mar 2008 22:24:32 +0000 (16:24 -0600)]
gallium: added tgsi_num_tokens() function to return number of tokens in token array.

Maybe move to a different file someday.

16 years agogallium: Simple cross platform get-opt system.
José Fonseca [Mon, 24 Mar 2008 22:30:33 +0000 (22:30 +0000)]
gallium: Simple cross platform get-opt system.

Uses getenv on Linux, and a memory mapped text file on Windows.

It supports boolean options, flags, and plain strings.

16 years agogallium: cleanup p_debug
José Fonseca [Mon, 24 Mar 2008 20:18:59 +0000 (20:18 +0000)]
gallium: cleanup p_debug

Now debug_printf is disabled on release builds. Use debug_error or
_debug_printf to output messages on release versions.

16 years agogallium: move filter assignment out of loop
Brian [Mon, 24 Mar 2008 18:51:50 +0000 (12:51 -0600)]
gallium: move filter assignment out of loop

16 years agogallium: fix REALLOC() to copy smaller of old/new sizes
Brian [Mon, 24 Mar 2008 18:50:28 +0000 (12:50 -0600)]
gallium: fix REALLOC() to copy smaller of old/new sizes

16 years agogallium: Protect operator precedence in macro.
José Fonseca [Mon, 24 Mar 2008 18:25:31 +0000 (18:25 +0000)]
gallium: Protect operator precedence in macro.

16 years agogallium: free bitmap fragment shaders, misc clean-up
Brian Paul [Mon, 24 Mar 2008 17:55:29 +0000 (11:55 -0600)]
gallium: free bitmap fragment shaders, misc clean-up

16 years agogallium: add missing cso_save_samplers() call
Brian Paul [Mon, 24 Mar 2008 17:46:41 +0000 (11:46 -0600)]
gallium: add missing cso_save_samplers() call

16 years agogallium: Remove util_gen_mipmap_filter().
Michal Krol [Mon, 24 Mar 2008 15:50:39 +0000 (16:50 +0100)]
gallium: Remove util_gen_mipmap_filter().

16 years agogallium: pass the filter mode to util_gen_mipmap().
Brian [Mon, 24 Mar 2008 14:53:16 +0000 (08:53 -0600)]
gallium: pass the filter mode to util_gen_mipmap().

Remove util_gen_mipmap_filter() when no longer used.

16 years agogallium: tweak coords in u_gen_mipmap code
Michal Krol [Mon, 24 Mar 2008 14:09:34 +0000 (08:09 -0600)]
gallium: tweak coords in u_gen_mipmap code

16 years agodraw: pre-declare referenced structs
Keith Whitwell [Mon, 24 Mar 2008 10:53:26 +0000 (10:53 +0000)]
draw: pre-declare referenced structs

16 years agoRevert "draw: Fix #include order to fix Linux build."
Keith Whitwell [Mon, 24 Mar 2008 10:52:20 +0000 (10:52 +0000)]
Revert "draw: Fix #include order to fix Linux build."

This reverts commit a6d17bf671d6bfbb187a62ba14b9ad08fb5dafe1.

16 years agodraw: Fix #include order to fix Linux build.
Michel Dänzer [Mon, 24 Mar 2008 09:56:12 +0000 (09:56 +0000)]
draw: Fix #include order to fix Linux build.

16 years agonv40: maintain pipe_surface status field
Ben Skeggs [Mon, 24 Mar 2008 02:45:38 +0000 (13:45 +1100)]
nv40: maintain pipe_surface status field

16 years agonv40: respect rasterizer cso bypass_clipping flag
Ben Skeggs [Mon, 24 Mar 2008 02:41:40 +0000 (13:41 +1100)]
nv40: respect rasterizer cso bypass_clipping flag

16 years agonouveau: fix infinite wait on space for userbuf.
Ben Skeggs [Mon, 24 Mar 2008 02:01:35 +0000 (13:01 +1100)]
nouveau: fix infinite wait on space for userbuf.

A recent commit removed a bug which essentially caused a sync after each
use of a user buffer.  In fixing it, the scratch area can now become
fragmented under some circumstances leading to nouveau_bo_tmp() waiting
forever for a large enough block of free space.

This fixes ppracer, gl-117 and probably a heap of other apps.

16 years agodraw: check need_pipeline() in passthrough
Keith Whitwell [Sun, 23 Mar 2008 21:55:19 +0000 (21:55 +0000)]
draw: check need_pipeline() in passthrough

16 years agodraw: tweak the definition of draw_need_pipeline, fix minor bug
Keith Whitwell [Sun, 23 Mar 2008 21:54:44 +0000 (21:54 +0000)]
draw: tweak the definition of draw_need_pipeline, fix minor bug

16 years agodraw: fix crlf
Keith Whitwell [Sun, 23 Mar 2008 21:31:23 +0000 (21:31 +0000)]
draw: fix crlf

16 years agodraw: rename emit functions to match pipe_format names
Keith Whitwell [Sun, 23 Mar 2008 21:31:14 +0000 (21:31 +0000)]
draw: rename emit functions to match pipe_format names

16 years agodraw: restructure fetch/emit as a pair of function calls
Keith Whitwell [Sun, 23 Mar 2008 20:36:00 +0000 (20:36 +0000)]
draw: restructure fetch/emit as a pair of function calls

16 years agogallium: Add util_gen_mipmap_filter().
Michal Krol [Sun, 23 Mar 2008 19:39:35 +0000 (20:39 +0100)]
gallium: Add util_gen_mipmap_filter().

We need a way to specify the type of minification filter
used to downsample mipmap levels.
The old util_gen_mipmap() retains its behaviour and uses
LINEAR filter.

16 years agogallium: Fix memory leak.
José Fonseca [Sun, 23 Mar 2008 19:38:11 +0000 (19:38 +0000)]
gallium: Fix memory leak.

pipe cso's were being destroyed, but the hash elements themselves not.

proper fix is IMHO add a destructor callback to cso_hash.

16 years agogallium: Remove the debug_mask_* stuff.
José Fonseca [Sun, 23 Mar 2008 18:57:35 +0000 (18:57 +0000)]
gallium: Remove the debug_mask_* stuff.

Overcomplex and not much different from using a global variable...

16 years agogallium: Fix typo.
José Fonseca [Sun, 23 Mar 2008 18:52:37 +0000 (18:52 +0000)]
gallium: Fix typo.

16 years agogallium: Memory debugging utilities.
José Fonseca [Sun, 23 Mar 2008 18:38:10 +0000 (18:38 +0000)]
gallium: Memory debugging utilities.

There are no known tools for windows kernel memory debugging, so this is a
simple set of malloc etc wrappers.

Enabled by default on win32 debug builds

16 years agogallium: wrap decls in extern "C"
José Fonseca [Sun, 23 Mar 2008 18:30:53 +0000 (18:30 +0000)]
gallium: wrap decls in extern "C"

16 years agodraw: fix some unsigned vs ushort confusion
Keith Whitwell [Sun, 23 Mar 2008 18:21:00 +0000 (18:21 +0000)]
draw:  fix some unsigned vs ushort confusion

Middle-end elements are ushort, but prior to that have to treat all
elements as unsigned to avoid wrapping and/or overruns.

16 years agogallium: beginnings of draw module vertex rework
Keith Whitwell [Sun, 23 Mar 2008 16:44:59 +0000 (16:44 +0000)]
gallium: beginnings of draw module vertex rework

Trying to put a structure in place that we can actually optimize.
Initially just implementing a passthrough mode, this will fairly soon
replace all the vertex_cache/prim_queue/shader_queue stuff that's so
hard to understand...

Split the vertex processing into a couple of distinct stages:
- Frontend
    - Prepares two lists of elements (fetch and draw) to be processed
      by the next stage.  This stage doesn't fetch or draw vertices, but
      makes the decision which to draw.  Multiple implementations of this
      will implement different strategies, currently just a vcache
      implementation.
- MiddleEnd
    - Takes the list of fetch elements, fetches them, runs the vertex
      shader, cliptest, viewport transform on them to produce a
      linear array of vertex_header vertices.
    - Passes that list of vertices, plus the draw_elements (which index
      into that list) onto the backend
- Backend
    - Either the existing primitive/clipping pipeline, or the vbuf_render
      hardware backend provided by the driver.

Currently, the middle-end is the old passthrough code, and it build hardware
vertices, not vertex_header vertices as above.  It may be that passthrough
is a special case in this respect.