diff options
author | Michel Dänzer <[email protected]> | 2008-05-01 17:31:39 +0100 |
---|---|---|
committer | Michel Dänzer <[email protected]> | 2008-05-01 17:39:33 +0100 |
commit | de7277f81a0f4330f11ec429bf46e93d0a748dfe (patch) | |
tree | 2fa1d3b38cdb86fc4ef8428ef9b551425c7d5514 | |
parent | f1f52a8be98efa26c7c9bc480a2483fc2106d654 (diff) |
gallium: Set sampler->min_lod instead of always reallocating pipe_textures.
-rw-r--r-- | src/mesa/state_tracker/st_atom_sampler.c | 10 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_texture.c | 9 |
2 files changed, 3 insertions, 16 deletions
diff --git a/src/mesa/state_tracker/st_atom_sampler.c b/src/mesa/state_tracker/st_atom_sampler.c index e1ddb53b80f..0237da3693a 100644 --- a/src/mesa/state_tracker/st_atom_sampler.c +++ b/src/mesa/state_tracker/st_atom_sampler.c @@ -37,6 +37,7 @@ #include "st_program.h" #include "pipe/p_context.h" #include "pipe/p_defines.h" +#include "pipe/p_util.h" #include "cso_cache/cso_context.h" @@ -147,17 +148,8 @@ update_samplers(struct st_context *st) sampler->normalized_coords = 1; sampler->lod_bias = st->ctx->Texture.Unit[su].LodBias; -#if 1 - sampler->min_lod = (texobj->MinLod) < 0.0 ? 0.0 : texobj->MinLod; - sampler->max_lod = texobj->MaxLod; -#else - /* min/max lod should really be as follows (untested). - * Also, calculate_first_last_level() needs to be overhauled - * since today's hardware had real support for LOD clamping. - */ sampler->min_lod = MAX2(texobj->BaseLevel, texobj->MinLod); sampler->max_lod = MIN2(texobj->MaxLevel, texobj->MaxLod); -#endif sampler->border_color[0] = texobj->BorderColor[RCOMP]; sampler->border_color[1] = texobj->BorderColor[GCOMP]; diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index 981246221b1..5fd192a8b80 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -1342,8 +1342,6 @@ static void calculate_first_last_level(struct st_texture_object *stObj) { struct gl_texture_object *tObj = &stObj->base; - const struct gl_texture_image *const baseImage = - tObj->Image[0][tObj->BaseLevel]; /* These must be signed values. MinLod and MaxLod can be negative numbers, * and having firstLevel and lastLevel as signed prevents the need for @@ -1366,7 +1364,7 @@ calculate_first_last_level(struct st_texture_object *stObj) } else { firstLevel = 0; - lastLevel = MIN2(tObj->MaxLevel - tObj->BaseLevel, baseImage->MaxLog2); + lastLevel = MIN2(tObj->MaxLevel, tObj->Image[0][0]->WidthLog2); } break; case GL_TEXTURE_RECTANGLE_NV: @@ -1489,10 +1487,7 @@ st_finalize_texture(GLcontext *ctx, (stObj->pt->target != gl_target_to_pipe(stObj->base.Target) || stObj->pt->format != st_mesa_format_to_pipe_format(firstImage->base.TexFormat->MesaFormat) || - stObj->pt->last_level != stObj->lastLevel || - stObj->pt->width[0] != firstImage->base.Width2 || - stObj->pt->height[0] != firstImage->base.Height2 || - stObj->pt->depth[0] != firstImage->base.Depth2 || + stObj->pt->last_level < stObj->lastLevel || stObj->pt->cpp != cpp || stObj->pt->compressed != firstImage->base.IsCompressed)) { pipe_texture_release(&stObj->pt); |