Am Donnerstag, 26. März 2015, 02:56:50 schrieb Glenn Kennard:
> CF_END could end up emitted in the middle of a shader on cayman
> when there was a loop at the very end.
> 
> Fixes glsl-1.50-geometry-end-primitive and
> ext_transform_feedback-geometry-shaders-basic piglit tests.

yes, I just found out that this test also crashes the rs880 gpu. Turning it 
off, make piglit run fine for geometry tests. Is this also supposed to fix it 
on my gpu (I don't like to risk another gpu lockup...)?

Marc

> 
> Signed-off-by: Glenn Kennard <glenn.kenn...@gmail.com>
> ---
> Bug exposed by [PATCH] r600g/sb: Enable SB for geometry shaders
> 
>  src/gallium/drivers/r600/sb/sb_bc_finalize.cpp | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp
> b/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp index 8d0be06..08b7d77
> 100644
> --- a/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp
> +++ b/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp
> @@ -127,6 +127,14 @@ void bc_finalizer::finalize_loop(region_node* r) {
>       cf_node *loop_start = sh.create_cf(CF_OP_LOOP_START_DX10);
>       cf_node *loop_end = sh.create_cf(CF_OP_LOOP_END);
> 
> +     // Update last_cf, but don't overwrite it if it's outside the current 
loop
> nest since +  // it may point to a cf that is later in program order.
> +     // The single parent level check is sufficient since finalize_loop() is
> processed in +        // reverse order from innermost to outermost loop nest
> level.
> +     if (!last_cf || last_cf->get_parent_region() == r) {
> +             last_cf = loop_end;
> +     }
> +
>       loop_start->jump_after(loop_end);
>       loop_end->jump_after(loop_start);

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to