LLVMBuilderRef builder = gallivm->builder;
LLVMValueRef coords[5];
LLVMValueRef offsets[3] = { NULL };
- LLVMValueRef explicit_lod = NULL, projector = NULL;
+ LLVMValueRef explicit_lod = NULL, projector = NULL, ms_index = NULL;
struct lp_sampler_params params;
struct lp_derivatives derivs;
unsigned sample_key = 0;
break;
}
case nir_tex_src_ms_index:
+ sample_key |= LP_SAMPLER_FETCH_MS;
+ ms_index = cast_type(bld_base, get_src(bld_base, instr->src[i].src), nir_type_int, 32);
break;
default:
assert(0);
params.coords = coords;
params.texel = texel;
params.lod = explicit_lod;
+ params.ms_index = ms_index;
bld_base->tex(bld_base, ¶ms);
assign_dest(bld_base, &instr->dest, texel);
}
LLVMValueRef explicit_lod = NULL;
LLVMValueRef coords[5];
LLVMValueRef offsets[3] = { NULL };
+ LLVMValueRef ms_index = NULL;
struct lp_sampler_params params;
enum lp_sampler_lod_property lod_property = LP_SAMPLER_LOD_SCALAR;
unsigned dims, i;
explicit_lod = lp_build_emit_fetch(&bld->bld_base, inst, 0, 3);
lod_property = lp_build_lod_property(&bld->bld_base, inst, 0);
}
+
+ if (target == TGSI_TEXTURE_2D_MSAA ||
+ target == TGSI_TEXTURE_2D_ARRAY_MSAA) {
+ sample_key |= LP_SAMPLER_FETCH_MS;
+ ms_index = lp_build_emit_fetch(&bld->bld_base, inst, 0, 3);
+ }
+
/*
* XXX: for real msaa support, the w component (or src2.x for sample_i_ms)
* would be the sample index.
params.derivs = NULL;
params.lod = explicit_lod;
params.texel = texel;
+ params.ms_index = ms_index;
bld->sampler->emit_tex_sample(bld->sampler,
bld->bld_base.base.gallivm,