util_dynarray_foreach(&binary->lds_symbols, struct ac_rtld_symbol, symbol)
symbol->part_idx = ~0u;
- unsigned max_lds_size = i.info->chip_class >= GFX7 ? 64 * 1024 : 32 * 1024;
+ unsigned max_lds_size = 64 * 1024;
+
+ if (i.info->chip_class == GFX6 ||
+ (i.shader_type != MESA_SHADER_COMPUTE &&
+ i.shader_type != MESA_SHADER_FRAGMENT))
+ max_lds_size = 32 * 1024;
+
uint64_t shared_lds_size = 0;
if (!layout_symbols(binary->lds_symbols.data, i.num_shared_lds_symbols, &shared_lds_size))
goto fail;
#include <stddef.h>
#include "util/u_dynarray.h"
+#include "compiler/shader_enums.h"
struct ac_rtld_part;
struct ac_shader_config;
struct ac_rtld_open_info {
const struct radeon_info *info;
struct ac_rtld_options options;
+ gl_shader_stage shader_type;
unsigned num_parts;
const char * const *elf_ptrs; /* in-memory ELF objects of each part */
#include "tgsi/tgsi_strings.h"
#include "tgsi/tgsi_util.h"
#include "tgsi/tgsi_dump.h"
+#include "tgsi/tgsi_from_mesa.h"
#include "ac_binary.h"
#include "ac_exp_param.h"
struct ac_rtld_binary *rtld)
{
const struct si_shader_selector *sel = shader->selector;
+ enum pipe_shader_type shader_type = sel ? sel->type : PIPE_SHADER_COMPUTE;
const char *part_elfs[5];
size_t part_sizes[5];
unsigned num_parts = 0;
.options = {
.halt_at_entry = screen->options.halt_shaders,
},
+ .shader_type = tgsi_processor_to_shader_stage(shader_type),
.num_parts = num_parts,
.elf_ptrs = part_elfs,
.elf_sizes = part_sizes,