[Mesa-dev] [PATCH] r600: don't parse properties ourselves.

Dave Airlie airlied at gmail.com
Sat Aug 22 17:21:35 PDT 2015


shader scan has already happened so just the results,
also nobody uses gs_input_prim so drop it.

Signed-off-by: Dave Airlie <airlied at redhat.com>
---
 src/gallium/drivers/r600/r600_shader.c | 38 +++++++++-------------------------
 src/gallium/drivers/r600/r600_shader.h |  1 -
 2 files changed, 10 insertions(+), 29 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c
index 8d1f95a..74141bb 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -1809,7 +1809,6 @@ static int r600_shader_from_tgsi(struct r600_context *rctx,
 	struct tgsi_token *tokens = pipeshader->selector->tokens;
 	struct pipe_stream_output_info so = pipeshader->selector->so;
 	struct tgsi_full_immediate *immediate;
-	struct tgsi_full_property *property;
 	struct r600_shader_ctx ctx;
 	struct r600_bytecode_output output[32];
 	unsigned output_done, noutput;
@@ -1968,6 +1967,16 @@ static int r600_shader_from_tgsi(struct r600_context *rctx,
 	ctx.nliterals = 0;
 	ctx.literals = NULL;
 	shader->fs_write_all = FALSE;
+	if (ctx.info.properties[TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS])
+		shader->fs_write_all = TRUE;
+
+	shader->vs_position_window_space = FALSE;
+	if (ctx.info.properties[TGSI_PROPERTY_VS_WINDOW_SPACE_POSITION])
+		shader->vs_position_window_space = TRUE;
+
+	shader->gs_output_prim = ctx.info.properties[TGSI_PROPERTY_GS_OUTPUT_PRIM];
+	shader->gs_max_out_vertices = ctx.info.properties[TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES];
+	shader->gs_num_invocations = ctx.info.properties[TGSI_PROPERTY_GS_INVOCATIONS];
 
 	if (shader->vs_as_gs_a)
 		vs_add_primid_output(&ctx, key.vs_prim_id_out);
@@ -1994,34 +2003,7 @@ static int r600_shader_from_tgsi(struct r600_context *rctx,
 				goto out_err;
 			break;
 		case TGSI_TOKEN_TYPE_INSTRUCTION:
-			break;
 		case TGSI_TOKEN_TYPE_PROPERTY:
-			property = &ctx.parse.FullToken.FullProperty;
-			switch (property->Property.PropertyName) {
-			case TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS:
-				if (property->u[0].Data == 1)
-					shader->fs_write_all = TRUE;
-				break;
-			case TGSI_PROPERTY_VS_WINDOW_SPACE_POSITION:
-				if (property->u[0].Data == 1)
-					shader->vs_position_window_space = TRUE;
-				break;
-			case TGSI_PROPERTY_VS_PROHIBIT_UCPS:
-				/* we don't need this one */
-				break;
-			case TGSI_PROPERTY_GS_INPUT_PRIM:
-				shader->gs_input_prim = property->u[0].Data;
-				break;
-			case TGSI_PROPERTY_GS_OUTPUT_PRIM:
-				shader->gs_output_prim = property->u[0].Data;
-				break;
-			case TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES:
-				shader->gs_max_out_vertices = property->u[0].Data;
-				break;
-			case TGSI_PROPERTY_GS_INVOCATIONS:
-				shader->gs_num_invocations = property->u[0].Data;
-				break;
-			}
 			break;
 		default:
 			R600_ERR("unsupported token type %d\n", ctx.parse.FullToken.Token.Type);
diff --git a/src/gallium/drivers/r600/r600_shader.h b/src/gallium/drivers/r600/r600_shader.h
index 5d05c81..e0cfafd 100644
--- a/src/gallium/drivers/r600/r600_shader.h
+++ b/src/gallium/drivers/r600/r600_shader.h
@@ -79,7 +79,6 @@ struct r600_shader {
 	boolean			uses_index_registers;
 
 	/* geometry shader properties */
-	unsigned		gs_input_prim;
 	unsigned		gs_output_prim;
 	unsigned		gs_max_out_vertices;
 	unsigned		gs_num_invocations;
-- 
2.4.3



More information about the mesa-dev mailing list