mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 13:00:09 +01:00
mesa: handle array textures in strip_texture_border()
If the texture is a 1D array, don't remove the border pixel from the height. Similarly for 2D array textures and the depth direction. Simplify the function by assuming the border is always one pixel. Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
This commit is contained in:
parent
4f869e9cb5
commit
6c1dea5445
1 changed files with 21 additions and 17 deletions
|
|
@ -2421,7 +2421,7 @@ _mesa_choose_texture_format(struct gl_context *ctx,
|
|||
|
||||
/**
|
||||
* Adjust pixel unpack params and image dimensions to strip off the
|
||||
* texture border.
|
||||
* one-pixel texture border.
|
||||
*
|
||||
* Gallium and intel don't support texture borders. They've seldem been used
|
||||
* and seldom been implemented correctly anyway.
|
||||
|
|
@ -2429,34 +2429,37 @@ _mesa_choose_texture_format(struct gl_context *ctx,
|
|||
* \param unpackNew returns the new pixel unpack parameters
|
||||
*/
|
||||
static void
|
||||
strip_texture_border(GLint *border,
|
||||
strip_texture_border(GLenum target,
|
||||
GLint *width, GLint *height, GLint *depth,
|
||||
const struct gl_pixelstore_attrib *unpack,
|
||||
struct gl_pixelstore_attrib *unpackNew)
|
||||
{
|
||||
assert(*border > 0); /* sanity check */
|
||||
assert(width);
|
||||
assert(height);
|
||||
assert(depth);
|
||||
|
||||
*unpackNew = *unpack;
|
||||
|
||||
if (unpackNew->RowLength == 0)
|
||||
unpackNew->RowLength = *width;
|
||||
|
||||
if (depth && unpackNew->ImageHeight == 0)
|
||||
if (unpackNew->ImageHeight == 0)
|
||||
unpackNew->ImageHeight = *height;
|
||||
|
||||
unpackNew->SkipPixels += *border;
|
||||
if (height)
|
||||
unpackNew->SkipRows += *border;
|
||||
if (depth)
|
||||
unpackNew->SkipImages += *border;
|
||||
|
||||
assert(*width >= 3);
|
||||
*width = *width - 2 * *border;
|
||||
if (height && *height >= 3)
|
||||
*height = *height - 2 * *border;
|
||||
if (depth && *depth >= 3)
|
||||
*depth = *depth - 2 * *border;
|
||||
*border = 0;
|
||||
unpackNew->SkipPixels++; /* skip the border */
|
||||
*width = *width - 2; /* reduce the width by two border pixels */
|
||||
|
||||
/* The min height of a texture with a border is 3 */
|
||||
if (*height >= 3 && target != GL_TEXTURE_1D_ARRAY) {
|
||||
unpackNew->SkipRows++; /* skip the border */
|
||||
*height = *height - 2; /* reduce the height by two border pixels */
|
||||
}
|
||||
|
||||
if (*depth >= 3 && target != GL_TEXTURE_2D_ARRAY) {
|
||||
unpackNew->SkipImages++; /* skip the border */
|
||||
*depth = *depth - 2; /* reduce the depth by two border pixels */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -2541,8 +2544,9 @@ teximage(struct gl_context *ctx, GLuint dims,
|
|||
* rarely-tested software fallback rendering.
|
||||
*/
|
||||
if (border && ctx->Const.StripTextureBorder) {
|
||||
strip_texture_border(&border, &width, &height, &depth, unpack,
|
||||
strip_texture_border(target, &width, &height, &depth, unpack,
|
||||
&unpack_no_border);
|
||||
border = 0;
|
||||
unpack = &unpack_no_border;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue