From 77cbded9957836d573664a5c2b1d26cbf04988ad Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 29 Mar 2017 01:22:47 +0200 Subject: [PATCH] st/glsl_to_tgsi: teach the DCE pass about bindless samplers/images MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit When a texture (or an image) instruction uses a bindless sampler (respectively a bindless image), make sure the DCE pass won't remove code when the resource is a temporary variable. Signed-off-by: Samuel Pitoiset Reviewed-by: Nicolai Hähnle Reviewed-by: Marek Olšák --- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index e2505a709ae..834b6c6dec4 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -5290,6 +5290,21 @@ glsl_to_tgsi_visitor::eliminate_dead_code(void) } } } + + if (inst->resource.file == PROGRAM_TEMPORARY) { + int src_chans; + + src_chans = 1 << GET_SWZ(inst->resource.swizzle, 0); + src_chans |= 1 << GET_SWZ(inst->resource.swizzle, 1); + src_chans |= 1 << GET_SWZ(inst->resource.swizzle, 2); + src_chans |= 1 << GET_SWZ(inst->resource.swizzle, 3); + + for (int c = 0; c < 4; c++) { + if (src_chans & (1 << c)) + writes[4 * inst->resource.index + c] = NULL; + } + } + break; } -- 2.30.2