[Mesa-dev] [PATCH 2/5] radeonsi: fix shader size and handling

Christian König deathsimple at vodafone.de
Wed Jul 25 10:58:57 PDT 2012


We should always upload the shader here.

Signed-off-by: Christian König <deathsimple at vodafone.de>
---
 src/gallium/drivers/radeonsi/radeonsi_shader.c |   26 ++++++++++++------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/radeonsi_shader.c b/src/gallium/drivers/radeonsi/radeonsi_shader.c
index 0edb379..32290a2 100644
--- a/src/gallium/drivers/radeonsi/radeonsi_shader.c
+++ b/src/gallium/drivers/radeonsi/radeonsi_shader.c
@@ -552,6 +552,7 @@ int si_pipe_shader_create(
 	unsigned char * inst_bytes;
 	unsigned inst_byte_count;
 	unsigned i;
+	uint32_t *ptr;
 	bool dump;
 
 	dump = debug_get_bool_option("RADEON_DUMP_SHADERS", FALSE);
@@ -606,23 +607,22 @@ int si_pipe_shader_create(
 	tgsi_parse_free(&si_shader_ctx.parse);
 
 	/* copy new shader */
+	si_resource_reference(&shader->bo, NULL);
+	shader->bo = si_resource_create_custom(ctx->screen, PIPE_USAGE_IMMUTABLE,
+					       inst_byte_count - 12);
 	if (shader->bo == NULL) {
-		uint32_t *ptr;
+		return -ENOMEM;
+	}
 
-		shader->bo = si_resource_create_custom(ctx->screen, PIPE_USAGE_IMMUTABLE, inst_byte_count);
-		if (shader->bo == NULL) {
-			return -ENOMEM;
-		}
-		ptr = (uint32_t*)rctx->ws->buffer_map(shader->bo->cs_buf, rctx->cs, PIPE_TRANSFER_WRITE);
-		if (0 /*R600_BIG_ENDIAN*/) {
-			for (i = 0; i < (inst_byte_count-12)/4; ++i) {
-				ptr[i] = util_bswap32(*(uint32_t*)(inst_bytes+12 + i*4));
-			}
-		} else {
-			memcpy(ptr, inst_bytes + 12, inst_byte_count - 12);
+	ptr = (uint32_t*)rctx->ws->buffer_map(shader->bo->cs_buf, rctx->cs, PIPE_TRANSFER_WRITE);
+	if (0 /*R600_BIG_ENDIAN*/) {
+		for (i = 0; i < (inst_byte_count-12)/4; ++i) {
+			ptr[i] = util_bswap32(*(uint32_t*)(inst_bytes+12 + i*4));
 		}
-		rctx->ws->buffer_unmap(shader->bo->cs_buf);
+	} else {
+		memcpy(ptr, inst_bytes + 12, inst_byte_count - 12);
 	}
+	rctx->ws->buffer_unmap(shader->bo->cs_buf);
 
 	free(inst_bytes);
 
-- 
1.7.9.5



More information about the mesa-dev mailing list