From cd27ff6a0f85ca35f0f7f2fa7971692e0028e2ed Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Thu, 10 Sep 2015 17:42:31 +0200 Subject: [PATCH] radeonsi: handle constant buffer alloc failures MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Cc: 11.0 Acked-by: Christian König Reviewed-by: Michel Dänzer --- src/gallium/drivers/radeonsi/si_descriptors.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c index 92a7068e715..b07ab3b94ac 100644 --- a/src/gallium/drivers/radeonsi/si_descriptors.c +++ b/src/gallium/drivers/radeonsi/si_descriptors.c @@ -472,7 +472,8 @@ void si_upload_const_buffer(struct si_context *sctx, struct r600_resource **rbuf u_upload_alloc(sctx->b.uploader, 0, size, const_offset, (struct pipe_resource**)rbuffer, &tmp); - util_memcpy_cpu_to_le32(tmp, ptr, size); + if (rbuffer) + util_memcpy_cpu_to_le32(tmp, ptr, size); } static void si_set_constant_buffer(struct pipe_context *ctx, uint shader, uint slot, @@ -504,6 +505,11 @@ static void si_set_constant_buffer(struct pipe_context *ctx, uint shader, uint s si_upload_const_buffer(sctx, (struct r600_resource**)&buffer, input->user_buffer, input->buffer_size, &buffer_offset); + if (!buffer) { + /* Just unbind on failure. */ + si_set_constant_buffer(ctx, shader, slot, NULL); + return; + } va = r600_resource(buffer)->gpu_address + buffer_offset; } else { pipe_resource_reference(&buffer, input->buffer); -- 2.30.2