summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanylo Piliaiev <danylo.piliaiev@globallogic.com>2019-09-24 14:12:39 +0300
committerJuan A. Suarez Romero <jasuarez@igalia.com>2019-10-02 09:41:27 -0400
commit2963e9fa3dc8a54e6958f50a5d5a7bebbce1bbd3 (patch)
tree406f6d51237b9b976a0b75c9bd03d7506a893547
parenta74657d4aaf40297d575c893d41165eaccc61eb3 (diff)
downloadmesa-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.c8
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;
}