Are the streamout values allowed to be restricted to the ranges of the vertex header fields, or do they have to reflect exactly what the shader wrote?
(I ran into a similar issue with ARB_fragment_layer_viewport, and while nothing has been done about it, the consensus was that the FS had to see exactly what the previous stage wrote, and so a real slot would be necessary) On Tue, Apr 15, 2014 at 11:23 AM, Anuj Phogat <anuj.pho...@gmail.com> wrote: > gl_ViewportIndex doesn't get its own varying slot. It is stored > in VARYING_SLOT_PSIZ.z. This patch fixes the issue for both gen7 > and gen8 because gen7_upload_3dstate_so_decl_list() is shared > between them. > > Fixes failures in OpenGL Khronos CTS test transform_feedback_builtins. > Makes new piglit test glsl-1.50-transform-feedback-builtins pass for > 'gl_ViewportIndex'. > > Cc: <mesa-sta...@lists.freedesktop.org> > Signed-off-by: Anuj Phogat <anuj.pho...@gmail.com> > --- > src/mesa/drivers/dri/i965/gen7_sol_state.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/src/mesa/drivers/dri/i965/gen7_sol_state.c > b/src/mesa/drivers/dri/i965/gen7_sol_state.c > index 3623238..8e554af 100644 > --- a/src/mesa/drivers/dri/i965/gen7_sol_state.c > +++ b/src/mesa/drivers/dri/i965/gen7_sol_state.c > @@ -123,6 +123,7 @@ gen7_upload_3dstate_so_decl_list(struct brw_context *brw, > > /* gl_PointSize is stored in VARYING_SLOT_PSIZ.w > * gl_Layer is stored in VARYING_SLOT_PSIZ.y > + * gl_ViewportIndex is stored in VARYING_SLOT_PSIZ.z > */ > if (varying == VARYING_SLOT_PSIZ) { > assert(components == 1); > @@ -130,6 +131,9 @@ gen7_upload_3dstate_so_decl_list(struct brw_context *brw, > } else if (varying == VARYING_SLOT_LAYER) { > assert(components == 1); > component_mask <<= 1; > + } else if (varying == VARYING_SLOT_VIEWPORT) { > + assert(components == 1); > + component_mask <<= 2; > } else { > component_mask <<= linked_xfb_info->Outputs[i].ComponentOffset; > } > @@ -137,7 +141,7 @@ gen7_upload_3dstate_so_decl_list(struct brw_context *brw, > buffer_mask |= 1 << buffer; > > decl |= buffer << SO_DECL_OUTPUT_BUFFER_SLOT_SHIFT; > - if (varying == VARYING_SLOT_LAYER) { > + if (varying == VARYING_SLOT_LAYER || varying == VARYING_SLOT_VIEWPORT) > { > decl |= vue_map->varying_to_slot[VARYING_SLOT_PSIZ] << > SO_DECL_REGISTER_INDEX_SHIFT; > } else { > -- > 1.8.3.1 > > _______________________________________________ > mesa-stable mailing list > mesa-sta...@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-stable _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev