[Mesa-dev] [PATCH] tgsi/scan: handle holes between VS inputs, assert-fail in other cases
Brian Paul
brianp at vmware.com
Tue Feb 23 01:03:13 UTC 2016
On 02/22/2016 05:46 PM, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> "st/mesa: overhaul vertex setup for clearing, glDrawPixels, glBitmap"
> added a vertex shader declaring IN[0] and IN[2], but not IN[1].
>
> Drivers relying on tgsi_shader_info can't handle holes in declarations,
> because tgsi_shader_info doesn't track that.
>
> This is just a quick workaround meant for stable that will work for vertex
> shaders.
>
> This fixes radeonsi DrawPixels and CopyPixels crashes.
>
> Cc: mesa-stable at lists.freedesktop.org
> ---
> src/gallium/auxiliary/tgsi/tgsi_scan.c | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c
> index 489423d..4f85d2f 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_scan.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c
> @@ -247,7 +247,14 @@ scan_declaration(struct tgsi_shader_info *info,
> info->input_interpolate[reg] = (ubyte)fulldecl->Interp.Interpolate;
> info->input_interpolate_loc[reg] = (ubyte)fulldecl->Interp.Location;
> info->input_cylindrical_wrap[reg] = (ubyte)fulldecl->Interp.CylindricalWrap;
> - info->num_inputs++;
> +
> + /* Vertex shaders can have inputs with holes between them. */
> + if (info->processor == TGSI_PROCESSOR_VERTEX)
> + info->num_inputs = MAX2(info->num_inputs, reg + 1);
> + else {
> + info->num_inputs++;
> + assert(reg < info->num_inputs);
> + }
>
> /* Only interpolated varyings. Don't include POSITION.
> * Don't include integer varyings, because they are not
> @@ -341,6 +348,7 @@ scan_declaration(struct tgsi_shader_info *info,
> info->output_semantic_name[reg] = (ubyte) semName;
> info->output_semantic_index[reg] = (ubyte) semIndex;
> info->num_outputs++;
> + assert(reg < info->num_outputs);
>
> if (semName == TGSI_SEMANTIC_COLOR)
> info->colors_written |= 1 << semIndex;
>
You probably saw my work-around for this in the VMware driver. This is
the other approach I was looking at.
Reviewed-by: Brian Paul <brianp at vmware.com>
More information about the mesa-dev
mailing list