i965: Store the geometry output VUE map in brw_context.
authorPaul Berry <stereotype441@gmail.com>
Mon, 18 Feb 2013 18:16:02 +0000 (10:16 -0800)
committerPaul Berry <stereotype441@gmail.com>
Sun, 24 Mar 2013 17:55:27 +0000 (10:55 -0700)
commit463ef47b1672003bdf0737fdc63c4ffa985291f1
tree705fab32c67592fddc7ba6b5abad7957edd4c071
parent8fbc22e880a7a6f34a2fe4e8111b489bdd01919c
i965: Store the geometry output VUE map in brw_context.

Currently, the GPU pipeline has one active VUE map in effect at any
given time--the one representing the layout of vertex data coming from
the vertex shader.  However, when geometry shaders are added, they
will have their own independent VUE map.  Later pipeline stages (clip,
sf, fs) will need to consult the geometry shader VUE map if a geometry
shader is in use, and the vertex shader VUE map otherwise.

This patch adds a new field to brw_context, vue_map_geom_out, which
contains the VUE map that should be used by later pipeline stages.  It
also adds a new state flag, BRW_NEW_VUE_MAP_GEOM_OUT, which is
signalled whenever the contents of the VUE map changes.

Since we don't support geometry shaders yet, vue_map_geom_out is
currently set only by the brw_vs_prog state atom.

v2: Don't set vue_map_geom_out in do_vs_prog--that's redundant and
possibly problematic for precompiles.  Only set it in
brw_upload_vs_prog.  Also, make a copy instead of using a
pointer--this makes it possible to detect when the VUE map hasn't
changed, so we can avoid redundant state uploads.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_state_upload.c
src/mesa/drivers/dri/i965/brw_vs.c