diff options
author | Danylo Piliaiev <danylo.piliaiev@globallogic.com> | 2019-09-24 14:12:39 +0300 |
---|---|---|
committer | Juan A. Suarez Romero <jasuarez@igalia.com> | 2019-10-02 09:41:27 -0400 |
commit | 2963e9fa3dc8a54e6958f50a5d5a7bebbce1bbd3 (patch) | |
tree | 406f6d51237b9b976a0b75c9bd03d7506a893547 | |
parent | a74657d4aaf40297d575c893d41165eaccc61eb3 (diff) | |
download | mesa-2963e9fa3dc8a54e6958f50a5d5a7bebbce1bbd3.tar.gz |
st/nine: Ignore D3DSIO_RET if it is the last instruction in a shader
RET as a last instruction could be safely ignored.
Remove it to prevent crashes/warnings in case underlying driver
doesn't implement arbitrary returns.
A better way would be to remove the RET after the whole shader
is parsed which will handle a possible case when the last RET is
followed by a comment.
CC: <mesa-stable@lists.freedesktop.org>
Signed-off-by: Danylo Piliaiev <danylo.piliaiev@globallogic.com>
Reviewed-by: Axel Davy <davyaxel0@gmail.com>
(cherry picked from commit 2d8f77db839cb3a83f0b1575a028d5aa4258c322)
-rw-r--r-- | src/gallium/state_trackers/nine/nine_shader.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/gallium/state_trackers/nine/nine_shader.c b/src/gallium/state_trackers/nine/nine_shader.c index 212fd60255a..1bd513b1f6d 100644 --- a/src/gallium/state_trackers/nine/nine_shader.c +++ b/src/gallium/state_trackers/nine/nine_shader.c @@ -1802,7 +1802,13 @@ DECL_SPECIAL(LOOP) DECL_SPECIAL(RET) { - ureg_RET(tx->ureg); + /* RET as a last instruction could be safely ignored. + * Remove it to prevent crashes/warnings in case underlying + * driver doesn't implement arbitrary returns. + */ + if (*(tx->parse_next) != NINED3DSP_END) { + ureg_RET(tx->ureg); + } return D3D_OK; } |