r600: fix sampler indexing with texture buffers sampling
authorRoland Scheidegger <sroland@vmware.com>
Tue, 2 Jan 2018 22:03:44 +0000 (23:03 +0100)
committerRoland Scheidegger <sroland@vmware.com>
Wed, 10 Jan 2018 03:59:00 +0000 (04:59 +0100)
This fixes the new piglit test.
While here also fix up the logic for early exit of setting up driver consts.

Tested-by: Konstantin Kharlamov <hi-angel@yandex.ru>
Reviewed-by: Reviewed-by: Dave Airlie <airlied@redhat.com>
src/gallium/drivers/r600/r600_shader.c
src/gallium/drivers/r600/r600_state_common.c

index bb7cc177ae8e5d854bcfbae091dad7e505926e5c..716a829273da93d8cdaffa499cbfd3ab62b8a7af 100644 (file)
@@ -6856,6 +6856,7 @@ static int do_vtx_fetch_inst(struct r600_shader_ctx *ctx, boolean src_requires_l
        struct tgsi_full_instruction *inst = &ctx->parse.FullToken.FullInstruction;
        int src_gpr, r, i;
        int id = tgsi_tex_get_src_gpr(ctx, 1);
+       int sampler_index_mode = inst->Src[1].Indirect.Index == 2 ? 2 : 0; // CF_INDEX_1 : CF_INDEX_NONE
 
        src_gpr = tgsi_tex_get_src_gpr(ctx, 0);
        if (src_requires_loading) {
@@ -6887,6 +6888,7 @@ static int do_vtx_fetch_inst(struct r600_shader_ctx *ctx, boolean src_requires_l
        vtx.dst_sel_z = (inst->Dst[0].Register.WriteMask & 4) ? 2 : 7;          /* SEL_Z */
        vtx.dst_sel_w = (inst->Dst[0].Register.WriteMask & 8) ? 3 : 7;          /* SEL_W */
        vtx.use_const_fields = 1;
+       vtx.buffer_index_mode = sampler_index_mode;
 
        if ((r = r600_bytecode_add_vtx(ctx->bc, &vtx)))
                return r;
index e7fa1bbf5761c511fb468eccb32074ce75da3d7c..1d9ff7bd6e7305c2a4d773d4c1e189adbf1dd7df 100644 (file)
@@ -1380,8 +1380,8 @@ void eg_setup_buffer_constants(struct r600_context *rctx, int shader_type)
        }
 
        if (!samplers->views.dirty_buffer_constants &&
-           (images && !images->dirty_buffer_constants) &&
-           (buffers && !buffers->dirty_buffer_constants))
+           !(images && images->dirty_buffer_constants) &&
+           !(buffers && buffers->dirty_buffer_constants))
                return;
 
        if (images)