&z_offset, &z_subcoord);
offset = lp_build_add(&bld->int_coord_bld, offset, z_offset);
}
- else if (bld->static_state->target == PIPE_TEXTURE_CUBE) {
- LLVMValueRef z_offset;
- /* The r coord is the cube face in [0,5] */
- z_offset = lp_build_mul(&bld->int_coord_bld, r, img_stride_vec);
- offset = lp_build_add(&bld->int_coord_bld, offset, z_offset);
- }
+ }
+ if (bld->static_state->target == PIPE_TEXTURE_CUBE ||
+ bld->static_state->target == PIPE_TEXTURE_1D_ARRAY ||
+ bld->static_state->target == PIPE_TEXTURE_2D_ARRAY) {
+ LLVMValueRef z_offset;
+ /* The r coord is the cube face in [0,5] or array layer */
+ z_offset = lp_build_mul(&bld->int_coord_bld, r, img_stride_vec);
+ offset = lp_build_add(&bld->int_coord_bld, offset, z_offset);
}
if (mipoffsets) {
offset = lp_build_add(&bld->int_coord_bld, offset, mipoffsets);
bld->static_state->wrap_r,
&z_icoord);
}
- else if (bld->static_state->target == PIPE_TEXTURE_CUBE) {
- z_icoord = r;
- }
+ }
+ if (bld->static_state->target == PIPE_TEXTURE_CUBE ||
+ bld->static_state->target == PIPE_TEXTURE_1D_ARRAY ||
+ bld->static_state->target == PIPE_TEXTURE_2D_ARRAY) {
+ z_icoord = r;
}
/*
bld->static_state->wrap_s,
&x_offset0, &x_offset1,
&x_subcoord[0], &x_subcoord[1]);
+
+ /* add potential cube/array/mip offsets now as they are constant per pixel */
+ if (bld->static_state->target == PIPE_TEXTURE_CUBE ||
+ bld->static_state->target == PIPE_TEXTURE_1D_ARRAY ||
+ bld->static_state->target == PIPE_TEXTURE_2D_ARRAY) {
+ LLVMValueRef z_offset;
+ z_offset = lp_build_mul(&bld->int_coord_bld, r, img_stride_vec);
+ /* The r coord is the cube face in [0,5] or array layer */
+ x_offset0 = lp_build_add(&bld->int_coord_bld, x_offset0, z_offset);
+ x_offset1 = lp_build_add(&bld->int_coord_bld, x_offset1, z_offset);
+ }
if (mipoffsets) {
x_offset0 = lp_build_add(&bld->int_coord_bld, x_offset0, mipoffsets);
x_offset1 = lp_build_add(&bld->int_coord_bld, x_offset1, mipoffsets);
}
}
}
- else if (bld->static_state->target == PIPE_TEXTURE_CUBE) {
- LLVMValueRef z_offset;
- z_offset = lp_build_mul(&bld->int_coord_bld, r, img_stride_vec);
- for (y = 0; y < 2; y++) {
- for (x = 0; x < 2; x++) {
- /* The r coord is the cube face in [0,5] */
- offset[0][y][x] = lp_build_add(&bld->int_coord_bld,
- offset[0][y][x], z_offset);
- }
- }
- }
lp_build_sample_fetch_image_linear(bld, data_ptr, offset,
x_subcoord, y_subcoord,
bld->format_desc->block.width,
x_icoord1, x_stride,
&x_offset1, &x_subcoord[1]);
+
+ /* add potential cube/array/mip offsets now as they are constant per pixel */
+ if (bld->static_state->target == PIPE_TEXTURE_CUBE ||
+ bld->static_state->target == PIPE_TEXTURE_1D_ARRAY ||
+ bld->static_state->target == PIPE_TEXTURE_2D_ARRAY) {
+ LLVMValueRef z_offset;
+ z_offset = lp_build_mul(&bld->int_coord_bld, r, img_stride_vec);
+ /* The r coord is the cube face in [0,5] or array layer */
+ x_offset0 = lp_build_add(&bld->int_coord_bld, x_offset0, z_offset);
+ x_offset1 = lp_build_add(&bld->int_coord_bld, x_offset1, z_offset);
+ }
if (mipoffsets) {
x_offset0 = lp_build_add(&bld->int_coord_bld, x_offset0, mipoffsets);
x_offset1 = lp_build_add(&bld->int_coord_bld, x_offset1, mipoffsets);
}
}
}
- else if (bld->static_state->target == PIPE_TEXTURE_CUBE) {
- LLVMValueRef z_offset;
- z_offset = lp_build_mul(&bld->int_coord_bld, r, img_stride_vec);
- for (y = 0; y < 2; y++) {
- for (x = 0; x < 2; x++) {
- /* The r coord is the cube face in [0,5] */
- offset[0][y][x] = lp_build_add(&bld->int_coord_bld,
- offset[0][y][x], z_offset);
- }
- }
- }
lp_build_sample_fetch_image_linear(bld, data_ptr, offset,
x_subcoord, y_subcoord,