[Mesa-dev] [PATCH] i965/xfb: skip components in correct buffer.

Iago Toral itoral at igalia.com
Wed Jun 1 10:28:53 UTC 2016


Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>

On Wed, 2016-06-01 at 14:13 +1000, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
> 
> The driver was adding the skip components but always for buffer 0.
> 
> This fixes:
> GL45-CTS.gtf40.GL3Tests.transform_feedback3.transform_feedback3_skip_multiple_buffers
> 
> Cc: "12.0 11.2" <mesa-stable at lists.freedesktop.org>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/mesa/drivers/dri/i965/gen7_sol_state.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/gen7_sol_state.c b/src/mesa/drivers/dri/i965/gen7_sol_state.c
> index f7b1443..4749cc8 100644
> --- a/src/mesa/drivers/dri/i965/gen7_sol_state.c
> +++ b/src/mesa/drivers/dri/i965/gen7_sol_state.c
> @@ -123,7 +123,7 @@ gen7_upload_3dstate_so_decl_list(struct brw_context *brw,
>        const unsigned components = linked_xfb_info->Outputs[i].NumComponents;
>        unsigned component_mask = (1 << components) - 1;
>        unsigned stream_id = linked_xfb_info->Outputs[i].StreamId;
> -
> +      unsigned decl_buffer_slot = buffer << SO_DECL_OUTPUT_BUFFER_SLOT_SHIFT;
>        assert(stream_id < MAX_VERTEX_STREAMS);
>  
>        /* gl_PointSize is stored in VARYING_SLOT_PSIZ.w
> @@ -145,7 +145,7 @@ gen7_upload_3dstate_so_decl_list(struct brw_context *brw,
>  
>        buffer_mask[stream_id] |= 1 << buffer;
>  
> -      decl |= buffer << SO_DECL_OUTPUT_BUFFER_SLOT_SHIFT;
> +      decl |= decl_buffer_slot;
>        if (varying == VARYING_SLOT_LAYER || varying == VARYING_SLOT_VIEWPORT) {
>           decl |= vue_map->varying_to_slot[VARYING_SLOT_PSIZ] <<
>              SO_DECL_REGISTER_INDEX_SHIFT;
> @@ -172,12 +172,14 @@ gen7_upload_3dstate_so_decl_list(struct brw_context *brw,
>        next_offset[buffer] += skip_components;
>  
>        while (skip_components >= 4) {
> -         so_decl[stream_id][decls[stream_id]++] = SO_DECL_HOLE_FLAG | 0xf;
> +         so_decl[stream_id][decls[stream_id]++] =
> +            SO_DECL_HOLE_FLAG | 0xf | decl_buffer_slot;
>           skip_components -= 4;
>        }
>        if (skip_components > 0)
>           so_decl[stream_id][decls[stream_id]++] =
> -            SO_DECL_HOLE_FLAG | ((1 << skip_components) - 1);
> +            SO_DECL_HOLE_FLAG | ((1 << skip_components) - 1) |
> +            decl_buffer_slot;
>  
>        assert(linked_xfb_info->Outputs[i].DstOffset == next_offset[buffer]);
>  




More information about the mesa-dev mailing list