Mesa (master): ac/rtld: check correct LDS max size

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 20 00:31:12 UTC 2019


Module: Mesa
Branch: master
Commit: b64bd5887ee508c5db2aa5636f955974ce0b0ed2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b64bd5887ee508c5db2aa5636f955974ce0b0ed2

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Tue May 21 19:17:34 2019 -0400

ac/rtld: check correct LDS max size

Tested-by: Dieter Nützel <Dieter at nuetzel-hh.de>

---

 src/amd/common/ac_rtld.c                 | 8 +++++++-
 src/amd/common/ac_rtld.h                 | 2 ++
 src/gallium/drivers/radeonsi/si_shader.c | 3 +++
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/amd/common/ac_rtld.c b/src/amd/common/ac_rtld.c
index c750dbfa9cb..18f198f8af2 100644
--- a/src/amd/common/ac_rtld.c
+++ b/src/amd/common/ac_rtld.c
@@ -280,7 +280,13 @@ bool ac_rtld_open(struct ac_rtld_binary *binary,
 	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;
diff --git a/src/amd/common/ac_rtld.h b/src/amd/common/ac_rtld.h
index b13270b181d..3f60444f85e 100644
--- a/src/amd/common/ac_rtld.h
+++ b/src/amd/common/ac_rtld.h
@@ -29,6 +29,7 @@
 #include <stddef.h>
 
 #include "util/u_dynarray.h"
+#include "compiler/shader_enums.h"
 
 struct ac_rtld_part;
 struct ac_shader_config;
@@ -84,6 +85,7 @@ typedef bool (*ac_rtld_get_external_symbol_cb)(
 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 */
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index 231cb8c1cd1..eb75e2a77a4 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -28,6 +28,7 @@
 #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"
@@ -5098,6 +5099,7 @@ static bool si_shader_binary_open(struct si_screen *screen,
 				  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;
@@ -5136,6 +5138,7 @@ static bool si_shader_binary_open(struct si_screen *screen,
 			.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,




More information about the mesa-commit mailing list