From fed8b7f8177ed3e770df1989922ff5cc63eba895 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 17 Feb 2016 13:46:44 -0800 Subject: [PATCH] anv/pipeline: Delete out-of-bounds fragment shader outputs --- src/vulkan/anv_pipeline.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/vulkan/anv_pipeline.c b/src/vulkan/anv_pipeline.c index e6cc8faf4fc..4be2bfc625b 100644 --- a/src/vulkan/anv_pipeline.c +++ b/src/vulkan/anv_pipeline.c @@ -616,6 +616,19 @@ anv_pipeline_compile_fs(struct anv_pipeline *pipeline, if (nir == NULL) return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY); + nir_function_impl *impl = nir_shader_get_entrypoint(nir)->impl; + nir_foreach_variable_safe(var, &nir->outputs) { + if (var->data.location < FRAG_RESULT_DATA0) + continue; + + unsigned rt = var->data.location - FRAG_RESULT_DATA0; + if (rt >= key.nr_color_regions) { + var->data.mode = nir_var_local; + exec_node_remove(&var->node); + exec_list_push_tail(&impl->locals, &var->node); + } + } + void *mem_ctx = ralloc_context(NULL); if (module->nir == NULL)