On Wed, Sep 4, 2013 at 12:46 PM, Zack Rusin <za...@vmware.com> wrote:
> Hi, Stéphane. > > No we should not revert to the old behavior. The old behavior was > incorrect. Consider this: > > -- setup state that draws a wireframe -> draw should inject frontface > -- the driver needs to be able to find the injected wireframe output > -- draw > -- setup state the draws solid fill with fragment shader using primid > input -> draw should inject primid but not frontface > -- driver needs to be able to find the injected primid but not frontface > info > -- draw > > Without cleaning the attributed before the second draw the draw will keep > the frontface id in the extra attribs, incorrectly pointing the driver to a > non-existing crash. That's why the attribs need to be cleaned before > rendering. > Hmm good point. I don't care about primid at all in i915 so it didn't occur to me :) > > i915g simply shouldn't call draw_prepare_shader_outputs because it doesn't > know what to do with the injected front-face or primid anyway. That part > I'd suggest you remove. It will get you back to the old behavior. > Yup that does the trick, thanks! Stéphane > > z > > ------------------------------ > > Hi Zack, > > This change regresses a bunch of point sprite piglit tests on i915g. > Should we revert back to the old behaviour? As far as I can see, it was > correct (it was keeping the attributes in case another stage is using them). > > Stéphane > > > > On Thu, Aug 8, 2013 at 12:46 PM, Zack Rusin <za...@vmware.com> wrote: > >> Before inserting new front face and prim id outputs cleanup >> the old extra outputs, otherwise our cache will use previous >> output slots which will break as soon as outputs of the current >> shader don't match the last. >> >> Signed-off-by: Zack Rusin <za...@vmware.com> >> --- >> src/gallium/auxiliary/draw/draw_context.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/src/gallium/auxiliary/draw/draw_context.c >> b/src/gallium/auxiliary/draw/draw_context.c >> index af9caee..2dc6772 100644 >> --- a/src/gallium/auxiliary/draw/draw_context.c >> +++ b/src/gallium/auxiliary/draw/draw_context.c >> @@ -555,6 +555,7 @@ draw_get_shader_info(const struct draw_context *draw) >> void >> draw_prepare_shader_outputs(struct draw_context *draw) >> { >> + draw_remove_extra_vertex_attribs(draw); >> draw_ia_prepare_outputs(draw, draw->pipeline.ia); >> draw_unfilled_prepare_outputs(draw, draw->pipeline.unfilled); >> } >> -- >> 1.7.10.4 >> _______________________________________________ >> mesa-dev mailing list >> mesa-dev@lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/mesa-dev >> > > >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev