gallivm: use LLVM opaque pointers in lp_bld_sample.c
Acked-by: Marek Olšák <marek.olsak@amd.com> Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15893>
This commit is contained in:
parent
2a59fdb96d
commit
12cac07fe6
|
@ -1163,6 +1163,16 @@ lp_build_linear_mip_levels(struct lp_build_sample_context *bld,
|
||||||
lp_build_name(*lod_fpart_inout, "texture%u_mipweight", texture_unit);
|
lp_build_name(*lod_fpart_inout, "texture%u_mipweight", texture_unit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A helper function that factorizes this common pattern.
|
||||||
|
*/
|
||||||
|
static LLVMValueRef
|
||||||
|
load_mip(struct gallivm_state *gallivm, LLVMValueRef offsets, LLVMValueRef index1) {
|
||||||
|
LLVMValueRef zero = lp_build_const_int32(gallivm, 0);
|
||||||
|
LLVMValueRef indexes[2] = {zero, index1};
|
||||||
|
LLVMValueRef ptr = LLVMBuildGEP(gallivm->builder, offsets, indexes, ARRAY_SIZE(indexes), "");
|
||||||
|
return LLVMBuildLoad(gallivm->builder, ptr, "");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return pointer to a single mipmap level.
|
* Return pointer to a single mipmap level.
|
||||||
|
@ -1172,14 +1182,9 @@ LLVMValueRef
|
||||||
lp_build_get_mipmap_level(struct lp_build_sample_context *bld,
|
lp_build_get_mipmap_level(struct lp_build_sample_context *bld,
|
||||||
LLVMValueRef level)
|
LLVMValueRef level)
|
||||||
{
|
{
|
||||||
|
LLVMValueRef mip_offset = load_mip(bld->gallivm, bld->mip_offsets, level);
|
||||||
LLVMBuilderRef builder = bld->gallivm->builder;
|
LLVMBuilderRef builder = bld->gallivm->builder;
|
||||||
LLVMValueRef indexes[2], data_ptr, mip_offset;
|
LLVMValueRef data_ptr = LLVMBuildGEP(builder, bld->base_ptr, &mip_offset, 1, "");
|
||||||
|
|
||||||
indexes[0] = lp_build_const_int32(bld->gallivm, 0);
|
|
||||||
indexes[1] = level;
|
|
||||||
mip_offset = LLVMBuildGEP(builder, bld->mip_offsets, indexes, 2, "");
|
|
||||||
mip_offset = LLVMBuildLoad(builder, mip_offset, "");
|
|
||||||
data_ptr = LLVMBuildGEP(builder, bld->base_ptr, &mip_offset, 1, "");
|
|
||||||
return data_ptr;
|
return data_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1192,13 +1197,10 @@ lp_build_get_mip_offsets(struct lp_build_sample_context *bld,
|
||||||
LLVMValueRef level)
|
LLVMValueRef level)
|
||||||
{
|
{
|
||||||
LLVMBuilderRef builder = bld->gallivm->builder;
|
LLVMBuilderRef builder = bld->gallivm->builder;
|
||||||
LLVMValueRef indexes[2], offsets, offset1;
|
LLVMValueRef offsets, offset1;
|
||||||
|
|
||||||
indexes[0] = lp_build_const_int32(bld->gallivm, 0);
|
|
||||||
if (bld->num_mips == 1) {
|
if (bld->num_mips == 1) {
|
||||||
indexes[1] = level;
|
offset1 = load_mip(bld->gallivm, bld->mip_offsets, level);
|
||||||
offset1 = LLVMBuildGEP(builder, bld->mip_offsets, indexes, 2, "");
|
|
||||||
offset1 = LLVMBuildLoad(builder, offset1, "");
|
|
||||||
offsets = lp_build_broadcast_scalar(&bld->int_coord_bld, offset1);
|
offsets = lp_build_broadcast_scalar(&bld->int_coord_bld, offset1);
|
||||||
}
|
}
|
||||||
else if (bld->num_mips == bld->coord_bld.type.length / 4) {
|
else if (bld->num_mips == bld->coord_bld.type.length / 4) {
|
||||||
|
@ -1207,10 +1209,8 @@ lp_build_get_mip_offsets(struct lp_build_sample_context *bld,
|
||||||
offsets = bld->int_coord_bld.undef;
|
offsets = bld->int_coord_bld.undef;
|
||||||
for (i = 0; i < bld->num_mips; i++) {
|
for (i = 0; i < bld->num_mips; i++) {
|
||||||
LLVMValueRef indexi = lp_build_const_int32(bld->gallivm, i);
|
LLVMValueRef indexi = lp_build_const_int32(bld->gallivm, i);
|
||||||
|
offset1 = load_mip(bld->gallivm, bld->mip_offsets, LLVMBuildExtractElement(builder, level, indexi, ""));
|
||||||
LLVMValueRef indexo = lp_build_const_int32(bld->gallivm, 4 * i);
|
LLVMValueRef indexo = lp_build_const_int32(bld->gallivm, 4 * i);
|
||||||
indexes[1] = LLVMBuildExtractElement(builder, level, indexi, "");
|
|
||||||
offset1 = LLVMBuildGEP(builder, bld->mip_offsets, indexes, 2, "");
|
|
||||||
offset1 = LLVMBuildLoad(builder, offset1, "");
|
|
||||||
offsets = LLVMBuildInsertElement(builder, offsets, offset1, indexo, "");
|
offsets = LLVMBuildInsertElement(builder, offsets, offset1, indexo, "");
|
||||||
}
|
}
|
||||||
offsets = lp_build_swizzle_scalar_aos(&bld->int_coord_bld, offsets, 0, 4);
|
offsets = lp_build_swizzle_scalar_aos(&bld->int_coord_bld, offsets, 0, 4);
|
||||||
|
@ -1223,9 +1223,7 @@ lp_build_get_mip_offsets(struct lp_build_sample_context *bld,
|
||||||
offsets = bld->int_coord_bld.undef;
|
offsets = bld->int_coord_bld.undef;
|
||||||
for (i = 0; i < bld->num_mips; i++) {
|
for (i = 0; i < bld->num_mips; i++) {
|
||||||
LLVMValueRef indexi = lp_build_const_int32(bld->gallivm, i);
|
LLVMValueRef indexi = lp_build_const_int32(bld->gallivm, i);
|
||||||
indexes[1] = LLVMBuildExtractElement(builder, level, indexi, "");
|
offset1 = load_mip(bld->gallivm, bld->mip_offsets, LLVMBuildExtractElement(builder, level, indexi, ""));
|
||||||
offset1 = LLVMBuildGEP(builder, bld->mip_offsets, indexes, 2, "");
|
|
||||||
offset1 = LLVMBuildLoad(builder, offset1, "");
|
|
||||||
offsets = LLVMBuildInsertElement(builder, offsets, offset1, indexi, "");
|
offsets = LLVMBuildInsertElement(builder, offsets, offset1, indexi, "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1310,12 +1308,9 @@ lp_build_get_level_stride_vec(struct lp_build_sample_context *bld,
|
||||||
LLVMValueRef stride_array, LLVMValueRef level)
|
LLVMValueRef stride_array, LLVMValueRef level)
|
||||||
{
|
{
|
||||||
LLVMBuilderRef builder = bld->gallivm->builder;
|
LLVMBuilderRef builder = bld->gallivm->builder;
|
||||||
LLVMValueRef indexes[2], stride, stride1;
|
LLVMValueRef stride, stride1;
|
||||||
indexes[0] = lp_build_const_int32(bld->gallivm, 0);
|
|
||||||
if (bld->num_mips == 1) {
|
if (bld->num_mips == 1) {
|
||||||
indexes[1] = level;
|
stride1 = load_mip(bld->gallivm, stride_array, level);
|
||||||
stride1 = LLVMBuildGEP(builder, stride_array, indexes, 2, "");
|
|
||||||
stride1 = LLVMBuildLoad(builder, stride1, "");
|
|
||||||
stride = lp_build_broadcast_scalar(&bld->int_coord_bld, stride1);
|
stride = lp_build_broadcast_scalar(&bld->int_coord_bld, stride1);
|
||||||
}
|
}
|
||||||
else if (bld->num_mips == bld->coord_bld.type.length / 4) {
|
else if (bld->num_mips == bld->coord_bld.type.length / 4) {
|
||||||
|
@ -1325,10 +1320,8 @@ lp_build_get_level_stride_vec(struct lp_build_sample_context *bld,
|
||||||
stride = bld->int_coord_bld.undef;
|
stride = bld->int_coord_bld.undef;
|
||||||
for (i = 0; i < bld->num_mips; i++) {
|
for (i = 0; i < bld->num_mips; i++) {
|
||||||
LLVMValueRef indexi = lp_build_const_int32(bld->gallivm, i);
|
LLVMValueRef indexi = lp_build_const_int32(bld->gallivm, i);
|
||||||
|
stride1 = load_mip(bld->gallivm, stride_array, LLVMBuildExtractElement(builder, level, indexi, ""));
|
||||||
LLVMValueRef indexo = lp_build_const_int32(bld->gallivm, 4 * i);
|
LLVMValueRef indexo = lp_build_const_int32(bld->gallivm, 4 * i);
|
||||||
indexes[1] = LLVMBuildExtractElement(builder, level, indexi, "");
|
|
||||||
stride1 = LLVMBuildGEP(builder, stride_array, indexes, 2, "");
|
|
||||||
stride1 = LLVMBuildLoad(builder, stride1, "");
|
|
||||||
stride = LLVMBuildInsertElement(builder, stride, stride1, indexo, "");
|
stride = LLVMBuildInsertElement(builder, stride, stride1, indexo, "");
|
||||||
}
|
}
|
||||||
stride = lp_build_swizzle_scalar_aos(&bld->int_coord_bld, stride, 0, 4);
|
stride = lp_build_swizzle_scalar_aos(&bld->int_coord_bld, stride, 0, 4);
|
||||||
|
@ -1342,9 +1335,7 @@ lp_build_get_level_stride_vec(struct lp_build_sample_context *bld,
|
||||||
stride = bld->int_coord_bld.undef;
|
stride = bld->int_coord_bld.undef;
|
||||||
for (i = 0; i < bld->coord_bld.type.length; i++) {
|
for (i = 0; i < bld->coord_bld.type.length; i++) {
|
||||||
LLVMValueRef indexi = lp_build_const_int32(bld->gallivm, i);
|
LLVMValueRef indexi = lp_build_const_int32(bld->gallivm, i);
|
||||||
indexes[1] = LLVMBuildExtractElement(builder, level, indexi, "");
|
stride1 = load_mip(bld->gallivm, stride_array, LLVMBuildExtractElement(builder, level, indexi, ""));
|
||||||
stride1 = LLVMBuildGEP(builder, stride_array, indexes, 2, "");
|
|
||||||
stride1 = LLVMBuildLoad(builder, stride1, "");
|
|
||||||
stride = LLVMBuildInsertElement(builder, stride, stride1, indexi, "");
|
stride = LLVMBuildInsertElement(builder, stride, stride1, indexi, "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue