diff options
author | Tom Stellard <thomas.stellard@amd.com> | 2012-09-19 21:17:46 +0000 |
---|---|---|
committer | Tom Stellard <thomas.stellard@amd.com> | 2012-09-19 21:17:46 +0000 |
commit | 4555c2529407d304a24d45950c335077ad67fd68 (patch) | |
tree | 90e3616af231a5e4f1da767605c78e1d415fd571 | |
parent | f46de1252826395f2075a2eb244af8b864d360b5 (diff) |
XXX: Compile on demandSep19-Compute
-rw-r--r-- | src/gallium/drivers/r600/evergreen_compute.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/gallium/drivers/r600/evergreen_compute.c b/src/gallium/drivers/r600/evergreen_compute.c index 0d8be8f4f9b..29dba0838fb 100644 --- a/src/gallium/drivers/r600/evergreen_compute.c +++ b/src/gallium/drivers/r600/evergreen_compute.c @@ -123,7 +123,6 @@ void *evergreen_create_compute_state( { struct r600_context *ctx = (struct r600_context *)ctx_; struct r600_pipe_compute *shader = CALLOC_STRUCT(r600_pipe_compute); - void *p; #ifdef HAVE_OPENCL const struct pipe_llvm_program_header * header; @@ -152,13 +151,6 @@ void *evergreen_create_compute_state( struct r600_kernel *kernel = &shader->kernels[i]; kernel->llvm_module = llvm_get_kernel_module(i, code, header->num_bytes); - r600_compute_shader_create(ctx_, kernel->llvm_module, &kernel->bc); - kernel->code_bo = r600_compute_buffer_alloc_vram(ctx->screen, - kernel->bc.ndw * 4); - p = ctx->ws->buffer_map(kernel->code_bo->cs_buf, ctx->cs, - PIPE_TRANSFER_WRITE); - memcpy(p, kernel->bc.bytecode, kernel->bc.ndw * 4); - ctx->ws->buffer_unmap(kernel->code_bo->cs_buf); } #endif return shader; @@ -459,9 +451,22 @@ static void evergreen_launch_grid( uint32_t pc, const void *input) { struct r600_context *ctx = (struct r600_context *)ctx_; + struct r600_pipe_compute *shader = ctx->cs_shader_state.shader; + void *p; COMPUTE_DBG("*** evergreen_launch_grid: pc = %u\n", pc); + if (!shader->kernels[pc].code_bo) { + struct r600_kernel *kernel = &shader->kernels[pc]; + r600_compute_shader_create(ctx_, kernel->llvm_module, &kernel->bc); + kernel->code_bo = r600_compute_buffer_alloc_vram(ctx->screen, + kernel->bc.ndw * 4); + p = ctx->ws->buffer_map(kernel->code_bo->cs_buf, ctx->cs, + PIPE_TRANSFER_WRITE); + memcpy(p, kernel->bc.bytecode, kernel->bc.ndw * 4); + ctx->ws->buffer_unmap(kernel->code_bo->cs_buf); + } + ctx->cs_shader_state.kernel_index = pc; evergreen_compute_upload_input(ctx_, block_layout, grid_layout, input); compute_emit_cs(ctx, block_layout, grid_layout); |