X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fr600%2Fevergreen_compute.c;h=292b5e32afd3675d8c5d7580d227ce65e14b9594;hb=1da538f85bc327f4ae5e1a5b90c15b99f8cf48df;hp=c9643fcf2eeab24986c4aa0a28a296608994cc4c;hpb=77959ce07b75f83bff2aae30e4e78aa3c50ab70f;p=mesa.git diff --git a/src/gallium/drivers/r600/evergreen_compute.c b/src/gallium/drivers/r600/evergreen_compute.c index c9643fcf2ee..292b5e32afd 100644 --- a/src/gallium/drivers/r600/evergreen_compute.c +++ b/src/gallium/drivers/r600/evergreen_compute.c @@ -46,9 +46,6 @@ #include "evergreen_compute_internal.h" #include "compute_memory_pool.h" #include "sb/sb_public.h" -#ifdef HAVE_OPENCL -#include "radeon/radeon_llvm_util.h" -#endif #include "radeon/radeon_elf_util.h" #include @@ -242,7 +239,7 @@ static void r600_destroy_shader(struct r600_bytecode *bc) } static void *evergreen_create_compute_state(struct pipe_context *ctx, - const const struct pipe_compute_state *cso) + const struct pipe_compute_state *cso) { struct r600_context *rctx = (struct r600_context *)ctx; struct r600_pipe_compute *shader = CALLOC_STRUCT(r600_pipe_compute); @@ -372,7 +369,11 @@ static void evergreen_compute_upload_input(struct pipe_context *ctx, ctx->transfer_unmap(ctx, transfer); - /* ID=0 is reserved for the parameters */ + /* ID=0 and ID=3 are reserved for the parameters. + * LLVM will preferably use ID=0, but it does not work for dynamic + * indices. */ + evergreen_cs_set_vertex_buffer(rctx, 3, 0, + (struct pipe_resource*)shader->kernel_param); evergreen_cs_set_constant_buffer(rctx, 0, 0, input_size, (struct pipe_resource*)shader->kernel_param); } @@ -452,7 +453,7 @@ static void compute_emit_cs(struct r600_context *rctx, unsigned i; /* make sure that the gfx ring is only one active */ - if (rctx->b.dma.cs && rctx->b.dma.cs->cdw) { + if (radeon_emitted(rctx->b.dma.cs, 0)) { rctx->b.dma.flush(rctx, RADEON_FLUSH_ASYNC, NULL); } @@ -618,9 +619,9 @@ static void evergreen_set_compute_resources(struct pipe_context *ctx, start, count); for (unsigned i = 0; i < count; i++) { - /* The First three vertex buffers are reserved for parameters and + /* The First four vertex buffers are reserved for parameters and * global buffers. */ - unsigned vtx_id = 3 + i; + unsigned vtx_id = 4 + i; if (resources[i]) { struct r600_resource_global *buffer = (struct r600_resource_global*) @@ -976,18 +977,6 @@ static void r600_compute_global_transfer_flush_region(struct pipe_context *ctx, assert(0 && "TODO"); } -static void r600_compute_global_transfer_inline_write(struct pipe_context *pipe, - struct pipe_resource *resource, - unsigned level, - unsigned usage, - const struct pipe_box *box, - const void *data, - unsigned stride, - unsigned layer_stride) -{ - assert(0 && "TODO"); -} - static void r600_compute_global_buffer_destroy(struct pipe_screen *screen, struct pipe_resource *res) { @@ -1013,7 +1002,6 @@ static const struct u_resource_vtbl r600_global_buffer_vtbl = r600_compute_global_transfer_map, /* transfer_map */ r600_compute_global_transfer_flush_region,/* transfer_flush_region */ r600_compute_global_transfer_unmap, /* transfer_unmap */ - r600_compute_global_transfer_inline_write /* transfer_inline_write */ }; struct pipe_resource *r600_compute_global_buffer_create(struct pipe_screen *screen,