We should always upload the shader here.

Signed-off-by: Christian König <deathsim...@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

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to