Lines Matching refs:binary
176 static bool read_private_lds_symbols(struct ac_rtld_binary *binary, unsigned part_idx,
194 struct ac_rtld_part *part = &binary->parts[part_idx];
227 const struct ac_rtld_symbol *shared = find_symbol(&binary->lds_symbols, s.name, part_idx);
234 util_dynarray_append(&binary->lds_symbols, struct ac_rtld_symbol, s);
244 * Open a binary consisting of one or more shader parts.
246 * \param binary the uninitialized struct
247 * \param i binary opening parameters
249 bool ac_rtld_open(struct ac_rtld_binary *binary, struct ac_rtld_open_info i)
257 memset(binary, 0, sizeof(*binary));
258 memcpy(&binary->options, &i.options, sizeof(binary->options));
259 binary->wave_size = i.wave_size;
260 binary->gfx_level = i.info->gfx_level;
261 binary->num_parts = i.num_parts;
262 binary->parts = calloc(sizeof(*binary->parts), i.num_parts);
263 if (!binary->parts)
288 if (!util_dynarray_resize(&binary->lds_symbols, struct ac_rtld_symbol,
292 memcpy(binary->lds_symbols.data, i.shared_lds_symbols, binary->lds_symbols.size);
295 util_dynarray_foreach (&binary->lds_symbols, struct ac_rtld_symbol, symbol)
305 if (!layout_symbols(binary->lds_symbols.data, i.num_shared_lds_symbols, &shared_lds_size))
313 binary->lds_size = shared_lds_size;
319 if (binary->options.halt_at_entry)
323 struct ac_rtld_part *part = &binary->parts[part_idx];
325 util_dynarray_num_elements(&binary->lds_symbols, struct ac_rtld_symbol);
381 if (!read_private_lds_symbols(binary, part_idx, section, &lds_end_align))
387 if (!layout_symbols(util_dynarray_element(&binary->lds_symbols, struct ac_rtld_symbol,
389 util_dynarray_num_elements(&binary->lds_symbols, struct ac_rtld_symbol) -
393 binary->lds_size = MAX2(binary->lds_size, part_lds_size);
396 binary->rx_end_markers = pasted_text_size;
404 binary->lds_size = align(binary->lds_size, lds_end_align);
407 util_dynarray_grow(&binary->lds_symbols, struct ac_rtld_symbol, 1);
411 lds_end->offset = binary->lds_size;
415 if (binary->lds_size > max_lds_size) {
417 (unsigned)binary->lds_size, max_lds_size);
422 binary->rx_size = pasted_text_size;
423 binary->rx_size = align(binary->rx_size, rx_align);
426 struct ac_rtld_part *part = &binary->parts[part_idx];
433 s->offset += binary->rx_size;
437 binary->rx_size += rx_size;
438 binary->exec_size = exec_size;
464 binary->rx_size = align(binary->rx_size + prefetch_distance * 64, 128);
466 binary->rx_size = align(binary->rx_size + prefetch_distance * 64, 64);
475 ac_rtld_close(binary);
479 void ac_rtld_close(struct ac_rtld_binary *binary)
481 for (unsigned i = 0; i < binary->num_parts; ++i) {
482 struct ac_rtld_part *part = &binary->parts[i];
487 util_dynarray_fini(&binary->lds_symbols);
488 free(binary->parts);
489 binary->parts = NULL;
490 binary->num_parts = 0;
514 bool ac_rtld_get_section_by_name(struct ac_rtld_binary *binary, const char *name, const char **data,
517 assert(binary->num_parts == 1);
518 return get_section_by_name(&binary->parts[0], name, data, nbytes);
521 bool ac_rtld_read_config(const struct radeon_info *info, struct ac_rtld_binary *binary,
524 for (unsigned i = 0; i < binary->num_parts; ++i) {
525 struct ac_rtld_part *part = &binary->parts[i];
534 ac_parse_shader_binary_config(config_data, config_nbytes, binary->wave_size, info, &c);
571 const struct ac_rtld_symbol *lds_sym = find_symbol(&u->binary->lds_symbols, name, part_idx);
580 if (u->get_external_symbol(u->binary->gfx_level, u->cb_data, name, value))
587 struct ac_rtld_part *part = &u->binary->parts[part_idx];
623 struct ac_rtld_part *part = &u->binary->parts[part_idx];
738 * Upload the binary or binaries to the provided GPU buffers, including
759 if (u->binary->options.halt_at_entry) {
765 for (unsigned i = 0; i < u->binary->num_parts; ++i) {
766 struct ac_rtld_part *part = &u->binary->parts[i];
786 if (u->binary->rx_end_markers) {
787 uint32_t *dst = (uint32_t *)(u->rx_ptr + u->binary->rx_end_markers);
795 for (unsigned i = 0; i < u->binary->num_parts; ++i) {
796 struct ac_rtld_part *part = &u->binary->parts[i];