[Mesa-dev] [PATCH 2/4] mesa: fix crash when an ATI_fs pass begins with an alpha inst

Ian Romanick idr at freedesktop.org
Tue Nov 21 00:40:09 UTC 2017


On 11/20/2017 04:07 PM, Miklós Máté wrote:
> This fixes crash when:
> - first pass begins with alpha inst
> - first pass ends with color inst, second pass begins with alpha inst
> 
> Also, use the symbolic name instead of a number.
> Piglit: spec/ati_fragment_shader/api-alphafirst
> 
> Signed-off-by: Miklós Máté <mtmkls at gmail.com>
> ---
>  src/mesa/main/atifragshader.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/src/mesa/main/atifragshader.c b/src/mesa/main/atifragshader.c
> index 49ddb6e5af..d6fc37ac8f 100644
> --- a/src/mesa/main/atifragshader.c
> +++ b/src/mesa/main/atifragshader.c
> @@ -598,8 +598,10 @@ _mesa_FragmentOpXATI(GLint optype, GLuint arg_count, GLenum op, GLuint dst,
>        curProg->cur_pass=3;
>  
>     /* decide whether this is a new instruction or not ... all color instructions are new,
> -      and alpha instructions might also be new if there was no preceding color inst */
> -   if ((optype == 0) || (curProg->last_optype == optype)) {
> +      and alpha instructions might also be new if there was no preceding color inst,
> +      and this may be the first inst of the pass */

I know the code previously used this same formatting, but the Mesa style
is for the */ of a multi-line comment to be on its own line.  Each other
line should also start with a *.  And line-wrap around 78 characters.
Like:

   /* Decide whether this is a new instruction or not.  All color instructions
    * are new, and alpha instructions might also be new if there was no
    * preceding color inst.  This may also be the first inst of the pass.
    */

> +   if ((optype == ATI_FRAGMENT_SHADER_COLOR_OP) || (curProg->last_optype == optype)
> +         || (curProg->numArithInstr[curProg->cur_pass >> 1] == 0)) {

I lost the debate about where the || (or &&) should go... it should be
on the previous line.  Most of the parenthesis are unnecessary, and the
second line should line up with the opening (.

On a side topic... if anyone understands how
ati_fragment_shader::cur_pass works, it would be really great if they
could document it in mtypes.h.

>        if (curProg->numArithInstr[curProg->cur_pass >> 1] > 7) {
>  	 _mesa_error(ctx, GL_INVALID_OPERATION, "C/AFragmentOpATI(instrCount)");
>  	 return;
> 



More information about the mesa-dev mailing list