[Mesa-dev] [PATCH V2 9.1] i965/vs: Fix Gen4/5 VUE map inconsistency with gl_ClipVertex
Jordan Justen
jljusten at gmail.com
Sat Apr 27 00:36:44 PDT 2013
Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>
Tested-by: Jordan Justen <jordan.l.justen at intel.com>
I tested steam and a few games, and it seems good. On one generally
problematic (non-Valve) TF2 map, I did see some vertex location
issues. I don't suspect these are introduced by this patch.
Since this is for the stable branch, please verify that there are no
piglit regressions. I kind of hope we might get another r-b too.
On Fri, Apr 26, 2013 at 11:56 PM, Chris Forbes <chrisf at ijw.co.nz> wrote:
> This is roughly a backport of Eric's commit 0967c362.
>
> We avoided assigning a slot in the VUE map for gl_ClipVertex, but left
> the bit set in outputs_written, producing horrible confusion further
> down the pipe.
>
> Mostly fixes rendering in source games, and probably in Freespace 2 SCP.
>
> Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
>
> V2: Mask out the bit, not its index. Strangely, the game still worked
> with that wrong, but rendering of pretty much anything else was
> completely trashed.
> ---
> src/mesa/drivers/dri/i965/brw_vs.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c
> index 0810471..0234ebb 100644
> --- a/src/mesa/drivers/dri/i965/brw_vs.c
> +++ b/src/mesa/drivers/dri/i965/brw_vs.c
> @@ -62,9 +62,13 @@ brw_compute_vue_map(struct brw_context *brw, struct brw_vs_compile *c)
> {
> const struct intel_context *intel = &brw->intel;
> struct brw_vue_map *vue_map = &c->prog_data.vue_map;
> - GLbitfield64 outputs_written = c->prog_data.outputs_written;
> + GLbitfield64 outputs_written;
> int i;
>
> + if (intel->gen < 6)
> + c->prog_data.outputs_written &= ~BITFIELD64_BIT(VERT_RESULT_CLIP_VERTEX);
> + outputs_written = c->prog_data.outputs_written;
> +
> vue_map->num_slots = 0;
> for (i = 0; i < BRW_VERT_RESULT_MAX; ++i) {
> vue_map->vert_result_to_slot[i] = -1;
> @@ -150,8 +154,6 @@ brw_compute_vue_map(struct brw_context *brw, struct brw_vs_compile *c)
> * feedback is enabled or disabled, just go ahead and assign a slot for it.
> */
> for (int i = 0; i < VERT_RESULT_MAX; ++i) {
> - if (intel->gen < 6 && i == VERT_RESULT_CLIP_VERTEX)
> - continue;
> if ((outputs_written & BITFIELD64_BIT(i)) &&
> vue_map->vert_result_to_slot[i] == -1) {
> assign_vue_slot(vue_map, i);
> --
> 1.8.2.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list