From 4deca1274c25b80351dbec972b68ab6520a89b31 Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Fri, 6 Mar 2015 19:11:19 +0000 Subject: i965/skl: Fix the order of the arguments for the LD sampler message In Skylake the order of the arguments for sample messages with the LD type are u, v, lod, r whereas previously they were u, lod, v, r. This fixes 144 Piglit tests including ones that directly use texelFetch and also some using the meta stencil blit path which appears to use texelFetch in its shader. v2: Fix sampling 1D textures Reviewed-by: Kenneth Graunke Reviewed-by: Anuj Phogat --- src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/mesa/drivers/dri/i965/brw_fs_visitor.cpp') diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp index 3622e651818..06337c9051a 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp @@ -1889,15 +1889,26 @@ fs_visitor::emit_texture_gen7(ir_texture_opcode op, fs_reg dst, length++; break; case ir_txf: - /* Unfortunately, the parameters for LD are intermixed: u, lod, v, r. */ + /* Unfortunately, the parameters for LD are intermixed: u, lod, v, r. + * On Gen9 they are u, v, lod, r + */ + emit(MOV(retype(sources[length], BRW_REGISTER_TYPE_D), coordinate)); coordinate = offset(coordinate, 1); length++; + if (brw->gen >= 9) { + if (coord_components >= 2) { + emit(MOV(retype(sources[length], BRW_REGISTER_TYPE_D), coordinate)); + coordinate = offset(coordinate, 1); + } + length++; + } + emit(MOV(retype(sources[length], BRW_REGISTER_TYPE_D), lod)); length++; - for (int i = 1; i < coord_components; i++) { + for (int i = brw->gen >= 9 ? 2 : 1; i < coord_components; i++) { emit(MOV(retype(sources[length], BRW_REGISTER_TYPE_D), coordinate)); coordinate = offset(coordinate, 1); length++; -- cgit v1.2.3