Mesa (master): radeonsi: make si_shader_io_get_unique_index stricter

Marek Olšák mareko at kemper.freedesktop.org
Mon Nov 21 21:41:10 UTC 2016


Module: Mesa
Branch: master
Commit: c7f3e5c647cce64899ed464755ce69a7d2226eca
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c7f3e5c647cce64899ed464755ce69a7d2226eca

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sun Nov 13 19:54:13 2016 +0100

radeonsi: make si_shader_io_get_unique_index stricter

Tested-by: Edmondo Tommasina <edmondo.tommasina at gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

---

 src/gallium/drivers/radeonsi/si_shader.c        | 14 ++++----------
 src/gallium/drivers/radeonsi/si_state_shaders.c | 11 ++++++++++-
 2 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index a80d9c3..8b56459 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -123,11 +123,9 @@ unsigned si_shader_io_get_unique_index(unsigned semantic_name, unsigned index)
 	case TGSI_SEMANTIC_GENERIC:
 		if (index <= 63-4)
 			return 4 + index;
-		else
-			/* same explanation as in the default statement,
-			 * the only user hitting this is st/nine.
-			 */
-			return 0;
+
+		assert(!"invalid generic index");
+		return 0;
 
 	/* patch indices are completely separate and thus start from 0 */
 	case TGSI_SEMANTIC_TESSOUTER:
@@ -138,11 +136,7 @@ unsigned si_shader_io_get_unique_index(unsigned semantic_name, unsigned index)
 		return 2 + index;
 
 	default:
-		/* Don't fail here. The result of this function is only used
-		 * for LS, TCS, TES, and GS, where legacy GL semantics can't
-		 * occur, but this function is called for all vertex shaders
-		 * before it's known whether LS will be compiled or not.
-		 */
+		assert(!"invalid semantic name");
 		return 0;
 	}
 }
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c
index 1d116f6..d10084d 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -1425,9 +1425,18 @@ static void *si_create_shader_selector(struct pipe_context *ctx,
 				sel->patch_outputs_written |=
 					1llu << si_shader_io_get_unique_index(name, index);
 				break;
-			default:
+
+			case TGSI_SEMANTIC_GENERIC:
+				/* don't process indices the function can't handle */
+				if (index >= 60)
+					break;
+				/* fall through */
+			case TGSI_SEMANTIC_POSITION:
+			case TGSI_SEMANTIC_PSIZE:
+			case TGSI_SEMANTIC_CLIPDIST:
 				sel->outputs_written |=
 					1llu << si_shader_io_get_unique_index(name, index);
+				break;
 			}
 		}
 		sel->esgs_itemsize = util_last_bit64(sel->outputs_written) * 16;




More information about the mesa-commit mailing list