Lines Matching refs:program
59 static const amd_kernel_code_t *si_compute_get_code_object(const struct si_compute *program,
62 const struct si_shader_selector *sel = &program->sel;
64 if (program->ir_type != PIPE_SHADER_IR_NATIVE)
71 .wave_size = program->shader.wave_size,
73 .elf_ptrs = &program->shader.binary.elf_buffer,
74 .elf_sizes = &program->shader.binary.elf_size}))
112 struct si_compute *program = (struct si_compute *)job;
113 struct si_shader_selector *sel = &program->sel;
114 struct si_shader *shader = &program->shader;
127 assert(program->ir_type == PIPE_SHADER_IR_NIR);
133 program->shader.is_monolithic = true;
186 program->shader.compilation_failed = true;
193 if (!si_create_shader_variant(sscreen, compiler, &program->shader, debug)) {
194 program->shader.compilation_failed = true;
234 struct si_compute *program = CALLOC_STRUCT(si_compute);
235 struct si_shader_selector *sel = &program->sel;
245 program->shader.selector = &program->sel;
246 program->shader.wave_size = si_determine_wave_size(sscreen, &program->shader);
247 program->ir_type = cso->ir_type;
248 program->private_size = cso->req_private_mem;
249 program->input_size = cso->req_input_mem;
253 program->ir_type = PIPE_SHADER_IR_NIR;
265 program, si_create_compute_state_async);
270 program->shader.binary.elf_size = header->num_bytes;
271 program->shader.binary.elf_buffer = malloc(header->num_bytes);
272 if (!program->shader.binary.elf_buffer) {
273 FREE(program);
276 memcpy((void *)program->shader.binary.elf_buffer, header->blob, header->num_bytes);
278 const amd_kernel_code_t *code_object = si_compute_get_code_object(program, 0);
279 code_object_to_config(code_object, &program->shader.config);
281 bool ok = si_shader_binary_upload(sctx->screen, &program->shader, 0);
282 si_shader_dump(sctx->screen, &program->shader, &sctx->debug, stderr, true);
286 free((void *)program->shader.binary.elf_buffer);
287 FREE(program);
292 return program;
298 struct si_compute *program = (struct si_compute *)state;
299 struct si_shader_selector *sel = &program->sel;
301 sctx->cs_shader_state.program = program;
302 if (!program)
306 if (program->ir_type != PIPE_SHADER_IR_NATIVE)
320 program->shader.binary.elf_buffer,
321 program->shader.binary.elf_size,
323 uint64_t base_address = program->shader.bo->gpu_address;
339 struct si_compute *program = sctx->cs_shader_state.program;
341 if (first + n > program->max_global_buffers) {
342 unsigned old_max = program->max_global_buffers;
343 program->max_global_buffers = first + n;
344 program->global_buffers = realloc(
345 program->global_buffers, program->max_global_buffers * sizeof(program->global_buffers[0]));
346 if (!program->global_buffers) {
351 memset(&program->global_buffers[old_max], 0,
352 (program->max_global_buffers - old_max) * sizeof(program->global_buffers[0]));
357 pipe_resource_reference(&program->global_buffers[first + i], NULL);
365 pipe_resource_reference(&program->global_buffers[first + i], resources[i]);
501 static bool si_switch_compute_shader(struct si_context *sctx, struct si_compute *program,
512 if (sctx->cs_shader_state.emitted_program == program && sctx->cs_shader_state.offset == offset)
515 if (program->ir_type != PIPE_SHADER_IR_NATIVE) {
530 lds_blocks += align(program->sel.info.base.shared_size, 256) >> 8;
532 lds_blocks += align(program->sel.info.base.shared_size, 512) >> 9;
556 if (program->ir_type == PIPE_SHADER_IR_NATIVE) {
592 sctx->cs_shader_state.emitted_program = program;
644 struct si_compute *program = sctx->cs_shader_state.program;
680 dispatch.private_segment_size = util_cpu_to_le32(program->private_size);
681 dispatch.group_segment_size = util_cpu_to_le32(program->sel.info.base.shared_size);
726 struct si_compute *program = sctx->cs_shader_state.program;
733 u_upload_alloc(sctx->b.const_uploader, 0, program->input_size,
743 memcpy(kernel_args, info->input, program->input_size);
745 for (unsigned i = 0; i < program->input_size / 4; i++) {
759 struct si_compute *program = sctx->cs_shader_state.program;
760 struct si_shader_selector *sel = &program->sel;
766 unsigned cs_user_data_reg = block_size_reg + 4 * program->sel.info.uses_variable_block_size;
807 DIV_ROUND_UP(threads_per_threadgroup, sctx->cs_shader_state.program->shader.wave_size);
829 S_00B800_CS_W32_EN(sctx->cs_shader_state.program->shader.wave_size == 32);
901 struct si_shader_info *info = &sctx->cs_shader_state.program->sel.info;
934 struct si_compute *program = sctx->cs_shader_state.program;
935 const amd_kernel_code_t *code_object = si_compute_get_code_object(program, info->pc);
943 if (program->ir_type != PIPE_SHADER_IR_NATIVE && program->shader.compilation_failed)
963 si_context_add_resource_size(sctx, &program->shader.bo->b.b);
1000 if (!si_switch_compute_shader(sctx, program, &program->shader, code_object, info->pc, &prefetch))
1006 if (program->ir_type == PIPE_SHADER_IR_NATIVE &&
1011 for (i = 0; i < program->max_global_buffers; i++) {
1012 struct si_resource *buffer = si_resource(program->global_buffers[i]);
1031 si_cp_dma_prefetch(sctx, &program->shader.bo->b.b, 0, program->shader.bo->b.b.width0);
1033 if (program->ir_type != PIPE_SHADER_IR_NATIVE)
1045 BITFIELD_MASK(program->sel.info.base.num_images);
1062 void si_destroy_compute(struct si_compute *program)
1064 struct si_shader_selector *sel = &program->sel;
1066 if (program->ir_type != PIPE_SHADER_IR_NATIVE) {
1071 for (unsigned i = 0; i < program->max_global_buffers; i++)
1072 pipe_resource_reference(&program->global_buffers[i], NULL);
1073 FREE(program->global_buffers);
1075 si_shader_destroy(&program->shader);
1076 ralloc_free(program->sel.nir);
1077 FREE(program);
1082 struct si_compute *program = (struct si_compute *)state;
1088 if (program == sctx->cs_shader_state.program)
1089 sctx->cs_shader_state.program = NULL;
1091 if (program == sctx->cs_shader_state.emitted_program)
1094 si_compute_reference(&program, NULL);