llvmpipe: add support for tg4 component selection.
authorDave Airlie <airlied@redhat.com>
Wed, 9 Oct 2019 03:12:31 +0000 (13:12 +1000)
committerDave Airlie <airlied@linux.ie>
Fri, 11 Oct 2019 00:32:15 +0000 (00:32 +0000)
This is needed as part of GLES3.1 and helps for ARB_gpu_shader5.

Fixes: KHR-GLES31.core.texture_gather.* cases
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
src/gallium/drivers/llvmpipe/lp_screen.c

index 1f42c4ef5491890fc523223d32fe53ea1a8c2e03..9bfe41b9062dc73d67b4f82a98fa14504d3a7aa4 100644 (file)
@@ -2237,6 +2237,10 @@ emit_tex( struct lp_build_tgsi_soa_context *bld,
       lod_property = lp_build_lod_property(&bld->bld_base, inst, 0);
    }
 
+   if (sampler_op == LP_SAMPLER_OP_GATHER) {
+      uint32_t comp_val = inst->Src[sampler_reg].Register.SwizzleX;
+      sample_key |= (comp_val << LP_SAMPLER_GATHER_COMP_SHIFT);
+   }
    if (modifier == LP_BLD_TEX_MODIFIER_PROJECTED) {
       oow = lp_build_emit_fetch(&bld->bld_base, inst, 0, 3);
       oow = lp_build_rcp(&bld->bld_base.base, oow);
index 96c7623c4619e8c434058955b0eaa03af88a6a1a..63c1793620db323aadc6ac6cd10fde067d0195e1 100644 (file)
@@ -388,6 +388,7 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
    case PIPE_CAP_MAX_SHADER_BUFFER_SIZE:
       return LP_MAX_TGSI_SHADER_BUFFER_SIZE;
    case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT:
+   case PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE:
       return 1;
    default:
       return u_pipe_screen_get_param_defaults(screen, param);