From: Marek Olšák Date: Fri, 29 Sep 2017 02:52:10 +0000 (+0200) Subject: glsl_to_tgsi: fix instruction order for bindless textures X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=985338e2cb63156fc7abfc605716a0354db50c5c;p=mesa.git glsl_to_tgsi: fix instruction order for bindless textures We emitted instructions loading the bindless handle after the memory instruction. Cc: 17.2 Reviewed-by: Samuel Pitoiset Reviewed-by: Nicolai Hähnle --- diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 28899878bd0..d17000f98d1 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -3625,6 +3625,12 @@ glsl_to_tgsi_visitor::visit_image_intrinsic(ir_call *ir) glsl_to_tgsi_instruction *inst; + st_src_reg bindless; + if (imgvar->contains_bindless()) { + img->accept(this); + bindless = this->result; + } + if (ir->callee->intrinsic_id == ir_intrinsic_image_size) { dst.writemask = WRITEMASK_XYZ; inst = emit_asm(ir, TGSI_OPCODE_RESQ, dst); @@ -3722,8 +3728,7 @@ glsl_to_tgsi_visitor::visit_image_intrinsic(ir_call *ir) } if (imgvar->contains_bindless()) { - img->accept(this); - inst->resource = this->result; + inst->resource = bindless; inst->resource.swizzle = MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_X, SWIZZLE_Y); } else { @@ -4245,6 +4250,12 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir) emit_arl(ir, sampler_reladdr, reladdr); } + st_src_reg bindless; + if (var->contains_bindless()) { + ir->sampler->accept(this); + bindless = this->result; + } + if (opcode == TGSI_OPCODE_TXD) inst = emit_asm(ir, opcode, result_dst, coord, dx, dy); else if (opcode == TGSI_OPCODE_TXQ) { @@ -4275,8 +4286,7 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir) inst->tex_shadow = GL_TRUE; if (var->contains_bindless()) { - ir->sampler->accept(this); - inst->resource = this->result; + inst->resource = bindless; inst->resource.swizzle = MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_X, SWIZZLE_Y); } else {