From: Samuel Pitoiset Date: Tue, 28 Mar 2017 23:22:47 +0000 (+0200) Subject: st/glsl_to_tgsi: teach the DCE pass about bindless samplers/images X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=77cbded9957836d573664a5c2b1d26cbf04988ad;p=mesa.git st/glsl_to_tgsi: teach the DCE pass about bindless samplers/images 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 --- 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; }