[Mesa-dev] [PATCH 2/2] radeonsi: fix gl_InstanceID with non-zero start_instance

Marek Olšák maraeo at gmail.com
Thu Sep 5 07:41:49 PDT 2013


start_instance doesn't affect gl_InstanceID.

There's no piglit test, but it's kinda obvious the code was wrong.
---
 src/gallium/drivers/radeonsi/radeonsi_shader.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/radeonsi_shader.c b/src/gallium/drivers/radeonsi/radeonsi_shader.c
index 80dd773..867a385 100644
--- a/src/gallium/drivers/radeonsi/radeonsi_shader.c
+++ b/src/gallium/drivers/radeonsi/radeonsi_shader.c
@@ -122,7 +122,7 @@ static LLVMValueRef build_indexed_load(
 	return result;
 }
 
-static LLVMValueRef get_instance_index(
+static LLVMValueRef get_instance_index_for_fetch(
 	struct radeon_llvm_context * radeon_bld,
 	unsigned divisor)
 {
@@ -174,7 +174,7 @@ static void declare_input_vs(
 	if (divisor) {
 		/* Build index from instance ID, start instance and divisor */
 		si_shader_ctx->shader->shader.uses_instanceid = true;
-		buffer_index = get_instance_index(&si_shader_ctx->radeon_bld, divisor);
+		buffer_index = get_instance_index_for_fetch(&si_shader_ctx->radeon_bld, divisor);
 	} else {
 		/* Load the buffer index, which is always stored in VGPR0
 		 * for Vertex Shaders */
@@ -414,7 +414,8 @@ static void declare_system_value(
 
 	switch (decl->Semantic.Name) {
 	case TGSI_SEMANTIC_INSTANCEID:
-		value = get_instance_index(radeon_bld, 1);
+		value = LLVMGetParam(radeon_bld->main_fn,
+				     si_shader_ctx->param_instance_id);
 		break;
 
 	case TGSI_SEMANTIC_VERTEXID:
-- 
1.8.1.2



More information about the mesa-dev mailing list