[Mesa-dev] [PATCH 6/6] radeonsi: fix issues with monolithic shaders
Marek Olšák
maraeo at gmail.com
Sun Feb 19 16:27:47 UTC 2017
From: Marek Olšák <marek.olsak at amd.com>
R600_DEBUG=mono has had no effect since:
commit 1fabb297177069e95ec1bb7053acb32f8ec3e092
Author: Marek Olšák <marek.olsak at amd.com>
Date: Tue Feb 14 22:08:32 2017 +0100
radeonsi: have separate LS and ES main shader parts in the shader selector
Also, this assertion was failing:
si_state_shaders.c:1307: si_shader_select_with_key: Assertion
`!shader->is_optimized' failed.
---
src/gallium/drivers/radeonsi/si_state_shaders.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c
index 727ff33..12ea20b 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -1235,20 +1235,21 @@ again:
return -ENOMEM;
}
shader->selector = sel;
shader->key = *key;
shader->compiler_ctx_state = *compiler_state;
/* Compile the main shader part if it doesn't exist. This can happen
* if the initial guess was wrong. */
struct si_shader **mainp = si_get_main_shader_part(sel, key);
bool is_pure_monolithic =
+ sscreen->use_monolithic_shaders ||
memcmp(&key->mono, &zeroed.mono, sizeof(key->mono)) != 0;
if (!*mainp && !is_pure_monolithic) {
struct si_shader *main_part = CALLOC_STRUCT(si_shader);
if (!main_part) {
FREE(shader);
pipe_mutex_unlock(sel->mutex);
return -ENOMEM; /* skip the draw call */
}
@@ -1268,21 +1269,21 @@ again:
*mainp = main_part;
}
/* Monolithic-only shaders don't make a distinction between optimized
* and unoptimized. */
shader->is_monolithic =
is_pure_monolithic ||
memcmp(&key->opt, &zeroed.opt, sizeof(key->opt)) != 0;
shader->is_optimized =
- !sscreen->use_monolithic_shaders &&
+ !is_pure_monolithic &&
memcmp(&key->opt, &zeroed.opt, sizeof(key->opt)) != 0;
if (shader->is_optimized)
util_queue_fence_init(&shader->optimized_ready);
if (!sel->last_variant) {
sel->first_variant = shader;
sel->last_variant = shader;
} else {
sel->last_variant->next_variant = shader;
sel->last_variant = shader;
--
2.7.4
More information about the mesa-dev
mailing list