[Mesa-dev] [PATCH 1/3] draw: cleanup the extra attribs

Stéphane Marchesin stephane.marchesin at gmail.com
Wed Sep 4 14:33:06 PDT 2013


On Wed, Sep 4, 2013 at 12:46 PM, Zack Rusin <zackr at 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 <zackr at 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 <zackr at 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 at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20130904/12586f64/attachment.html>


More information about the mesa-dev mailing list