Module: Mesa Branch: master Commit: 4003ad298af3e94c0496d3a88fa7d9fbf42befb0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4003ad298af3e94c0496d3a88fa7d9fbf42befb0
Author: Miklós Máté <[email protected]> Date: Sat Dec 2 23:35:18 2017 +0100 mesa: fix crash when an ATI_fs pass begins with an alpha inst 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 v2: fixed formatting Signed-off-by: Miklós Máté <[email protected]> --- src/mesa/main/atifragshader.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/mesa/main/atifragshader.c b/src/mesa/main/atifragshader.c index 49ddb6e5af..d61455e12f 100644 --- a/src/mesa/main/atifragshader.c +++ b/src/mesa/main/atifragshader.c @@ -597,9 +597,13 @@ _mesa_FragmentOpXATI(GLint optype, GLuint arg_count, GLenum op, GLuint dst, else if (curProg->cur_pass==2) 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)) { + /* 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) { if (curProg->numArithInstr[curProg->cur_pass >> 1] > 7) { _mesa_error(ctx, GL_INVALID_OPERATION, "C/AFragmentOpATI(instrCount)"); return; _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
