turnip: fix binning shader compilation

ir3 segfaults if nonbinning is NULL for the bininng pass shader.

Signed-off-by: Jonathan Marek <jonathan@marek.ca>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
Jonathan Marek
2019-09-24 14:36:53 -04:00
parent 12372d60ff
commit f510901dc2

View File

@@ -222,13 +222,14 @@ tu_shader_compile_options_init(
static uint32_t * static uint32_t *
tu_compile_shader_variant(struct ir3_shader *shader, tu_compile_shader_variant(struct ir3_shader *shader,
const struct ir3_shader_key *key, const struct ir3_shader_key *key,
bool binning_pass, struct ir3_shader_variant *nonbinning,
struct ir3_shader_variant *variant) struct ir3_shader_variant *variant)
{ {
variant->shader = shader; variant->shader = shader;
variant->type = shader->type; variant->type = shader->type;
variant->key = *key; variant->key = *key;
variant->binning_pass = binning_pass; variant->binning_pass = !!nonbinning;
variant->nonbinning = nonbinning;
int ret = ir3_compile_shader_nir(shader->compiler, variant); int ret = ir3_compile_shader_nir(shader->compiler, variant);
if (ret) if (ret)
@@ -259,7 +260,7 @@ tu_shader_compile(struct tu_device *dev,
} }
shader->binary = tu_compile_shader_variant( shader->binary = tu_compile_shader_variant(
&shader->ir3_shader, &options->key, false, &shader->variants[0]); &shader->ir3_shader, &options->key, NULL, &shader->variants[0]);
if (!shader->binary) if (!shader->binary)
return VK_ERROR_OUT_OF_HOST_MEMORY; return VK_ERROR_OUT_OF_HOST_MEMORY;
@@ -267,7 +268,8 @@ tu_shader_compile(struct tu_device *dev,
if (options->include_binning_pass && if (options->include_binning_pass &&
shader->ir3_shader.type == MESA_SHADER_VERTEX) { shader->ir3_shader.type == MESA_SHADER_VERTEX) {
shader->binning_binary = tu_compile_shader_variant( shader->binning_binary = tu_compile_shader_variant(
&shader->ir3_shader, &options->key, true, &shader->variants[1]); &shader->ir3_shader, &options->key, &shader->variants[0],
&shader->variants[1]);
if (!shader->binning_binary) if (!shader->binning_binary)
return VK_ERROR_OUT_OF_HOST_MEMORY; return VK_ERROR_OUT_OF_HOST_MEMORY;