gallivm: Simplify lp_build_mipmap_level_sizes' interface.

This commit is contained in:
José Fonseca 2010-10-08 13:24:39 +01:00
parent 4eb222a3e6
commit 05fe33b71c
4 changed files with 42 additions and 67 deletions

View File

@ -513,61 +513,34 @@ lp_build_mipmap_level_sizes(struct lp_build_sample_context *bld,
LLVMValueRef width_vec, LLVMValueRef width_vec,
LLVMValueRef height_vec, LLVMValueRef height_vec,
LLVMValueRef depth_vec, LLVMValueRef depth_vec,
LLVMValueRef ilevel0, LLVMValueRef ilevel,
LLVMValueRef ilevel1,
LLVMValueRef row_stride_array, LLVMValueRef row_stride_array,
LLVMValueRef img_stride_array, LLVMValueRef img_stride_array,
LLVMValueRef *width0_vec, LLVMValueRef *out_width_vec,
LLVMValueRef *width1_vec, LLVMValueRef *out_height_vec,
LLVMValueRef *height0_vec, LLVMValueRef *out_depth_vec,
LLVMValueRef *height1_vec, LLVMValueRef *row_stride_vec,
LLVMValueRef *depth0_vec, LLVMValueRef *img_stride_vec)
LLVMValueRef *depth1_vec,
LLVMValueRef *row_stride0_vec,
LLVMValueRef *row_stride1_vec,
LLVMValueRef *img_stride0_vec,
LLVMValueRef *img_stride1_vec)
{ {
const unsigned mip_filter = bld->static_state->min_mip_filter; LLVMValueRef ilevel_vec;
LLVMValueRef ilevel0_vec, ilevel1_vec;
ilevel0_vec = lp_build_broadcast_scalar(&bld->int_coord_bld, ilevel0); ilevel_vec = lp_build_broadcast_scalar(&bld->int_coord_bld, ilevel);
if (mip_filter == PIPE_TEX_MIPFILTER_LINEAR)
ilevel1_vec = lp_build_broadcast_scalar(&bld->int_coord_bld, ilevel1);
/* /*
* Compute width, height, depth at mipmap level 'ilevel0' * Compute width, height, depth at mipmap level 'ilevel'
*/ */
*width0_vec = lp_build_minify(bld, width_vec, ilevel0_vec); *out_width_vec = lp_build_minify(bld, width_vec, ilevel_vec);
if (dims >= 2) { if (dims >= 2) {
*height0_vec = lp_build_minify(bld, height_vec, ilevel0_vec); *out_height_vec = lp_build_minify(bld, height_vec, ilevel_vec);
*row_stride0_vec = lp_build_get_level_stride_vec(bld, *row_stride_vec = lp_build_get_level_stride_vec(bld,
row_stride_array, row_stride_array,
ilevel0); ilevel);
if (dims == 3 || bld->static_state->target == PIPE_TEXTURE_CUBE) { if (dims == 3 || bld->static_state->target == PIPE_TEXTURE_CUBE) {
*img_stride0_vec = lp_build_get_level_stride_vec(bld, *img_stride_vec = lp_build_get_level_stride_vec(bld,
img_stride_array, img_stride_array,
ilevel0); ilevel);
if (dims == 3) { if (dims == 3) {
*depth0_vec = lp_build_minify(bld, depth_vec, ilevel0_vec); *out_depth_vec = lp_build_minify(bld, depth_vec, ilevel_vec);
}
}
}
if (mip_filter == PIPE_TEX_MIPFILTER_LINEAR) {
/* compute width, height, depth for second mipmap level at 'ilevel1' */
*width1_vec = lp_build_minify(bld, width_vec, ilevel1_vec);
if (dims >= 2) {
*height1_vec = lp_build_minify(bld, height_vec, ilevel1_vec);
*row_stride1_vec = lp_build_get_level_stride_vec(bld,
row_stride_array,
ilevel1);
if (dims == 3 || bld->static_state->target == PIPE_TEXTURE_CUBE) {
*img_stride1_vec = lp_build_get_level_stride_vec(bld,
img_stride_array,
ilevel1);
if (dims == 3) {
*depth1_vec = lp_build_minify(bld, depth_vec, ilevel1_vec);
}
} }
} }
} }

View File

@ -327,20 +327,14 @@ lp_build_mipmap_level_sizes(struct lp_build_sample_context *bld,
LLVMValueRef width_vec, LLVMValueRef width_vec,
LLVMValueRef height_vec, LLVMValueRef height_vec,
LLVMValueRef depth_vec, LLVMValueRef depth_vec,
LLVMValueRef ilevel0, LLVMValueRef ilevel,
LLVMValueRef ilevel1,
LLVMValueRef row_stride_array, LLVMValueRef row_stride_array,
LLVMValueRef img_stride_array, LLVMValueRef img_stride_array,
LLVMValueRef *width0_vec, LLVMValueRef *out_width_vec,
LLVMValueRef *width1_vec, LLVMValueRef *out_height_vec,
LLVMValueRef *height0_vec, LLVMValueRef *out_depth_vec,
LLVMValueRef *height1_vec, LLVMValueRef *row_stride_vec,
LLVMValueRef *depth0_vec, LLVMValueRef *img_stride_vec);
LLVMValueRef *depth1_vec,
LLVMValueRef *row_stride0_vec,
LLVMValueRef *row_stride1_vec,
LLVMValueRef *img_stride0_vec,
LLVMValueRef *img_stride1_vec);
void void

View File

@ -1002,13 +1002,17 @@ lp_build_sample_aos(struct lp_build_sample_context *bld,
/* compute image size(s) of source mipmap level(s) */ /* compute image size(s) of source mipmap level(s) */
lp_build_mipmap_level_sizes(bld, dims, width_vec, height_vec, depth_vec, lp_build_mipmap_level_sizes(bld, dims, width_vec, height_vec, depth_vec,
ilevel0, ilevel1, ilevel0,
row_stride_array, img_stride_array, row_stride_array, img_stride_array,
&width0_vec, &width1_vec, &width0_vec, &height0_vec, &depth0_vec,
&height0_vec, &height1_vec, &row_stride0_vec, &img_stride0_vec);
&depth0_vec, &depth1_vec, if (mip_filter == PIPE_TEX_MIPFILTER_LINEAR) {
&row_stride0_vec, &row_stride1_vec, lp_build_mipmap_level_sizes(bld, dims, width_vec, height_vec, depth_vec,
&img_stride0_vec, &img_stride1_vec); ilevel1,
row_stride_array, img_stride_array,
&width1_vec, &height1_vec, &depth1_vec,
&row_stride1_vec, &img_stride1_vec);
}
/* /*
* Get pointer(s) to image data for mipmap level(s). * Get pointer(s) to image data for mipmap level(s).

View File

@ -975,13 +975,17 @@ lp_build_sample_general(struct lp_build_sample_context *bld,
/* compute image size(s) of source mipmap level(s) */ /* compute image size(s) of source mipmap level(s) */
lp_build_mipmap_level_sizes(bld, dims, width_vec, height_vec, depth_vec, lp_build_mipmap_level_sizes(bld, dims, width_vec, height_vec, depth_vec,
ilevel0, ilevel1, ilevel0,
row_stride_array, img_stride_array, row_stride_array, img_stride_array,
&width0_vec, &width1_vec, &width0_vec, &height0_vec, &depth0_vec,
&height0_vec, &height1_vec, &row_stride0_vec, &img_stride0_vec);
&depth0_vec, &depth1_vec, if (mip_filter == PIPE_TEX_MIPFILTER_LINEAR) {
&row_stride0_vec, &row_stride1_vec, lp_build_mipmap_level_sizes(bld, dims, width_vec, height_vec, depth_vec,
&img_stride0_vec, &img_stride1_vec); ilevel1,
row_stride_array, img_stride_array,
&width1_vec, &height1_vec, &depth1_vec,
&row_stride1_vec, &img_stride1_vec);
}
/* /*
* Get pointer(s) to image data for mipmap level(s). * Get pointer(s) to image data for mipmap level(s).