mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-01 07:30:09 +01:00
Revert "Fix image_matches_texture_obj() MaxLevel check"
This reverts commit a9ee956511.
It was based on a failure to understand how ther driver allocates
memory, and causes a regression with Celestia.
Set MaxLevel to dstLevel before allocating new mipmap level.
The radeon driver will fail to allocate space for a new level that
is outside of BaseLevel..MaxLevel. Set MaxLevel before allocating.
Signed-off-by: Maciej Cencora <m.cencora@gmail.com>
This commit is contained in:
parent
9b2ebcaf4b
commit
c674a7eb7f
2 changed files with 7 additions and 7 deletions
|
|
@ -2400,6 +2400,9 @@ _mesa_meta_GenerateMipmap(GLcontext *ctx, GLenum target,
|
|||
break;
|
||||
}
|
||||
|
||||
/* Set MaxLevel large enough to hold the new level when we allocate it */
|
||||
_mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, dstLevel);
|
||||
|
||||
/* Create empty dest image */
|
||||
if (target == GL_TEXTURE_1D) {
|
||||
_mesa_TexImage1D(target, dstLevel, srcImage->InternalFormat,
|
||||
|
|
|
|||
|
|
@ -593,12 +593,7 @@ static int image_matches_texture_obj(struct gl_texture_object *texObj,
|
|||
if (!baseImage)
|
||||
return 0;
|
||||
|
||||
/* Check image level against object BaseLevel, but not MaxLevel. MaxLevel is not
|
||||
* the highest level that can be assigned to the miptree.
|
||||
*/
|
||||
const unsigned maxLevel = texObj->BaseLevel + baseImage->MaxLog2;
|
||||
if (level < texObj->BaseLevel || level > maxLevel
|
||||
|| level > RADEON_MIPTREE_MAX_TEXTURE_LEVELS)
|
||||
if (level < texObj->BaseLevel || level > texObj->MaxLevel)
|
||||
return 0;
|
||||
|
||||
const unsigned levelDiff = level - texObj->BaseLevel;
|
||||
|
|
@ -620,7 +615,9 @@ static void teximage_assign_miptree(radeonContextPtr rmesa,
|
|||
radeonTexObj *t = radeon_tex_obj(texObj);
|
||||
radeon_texture_image* image = get_radeon_texture_image(texImage);
|
||||
|
||||
/* check image for dimension and level compatibility with texture */
|
||||
/* Since miptree holds only images for levels <BaseLevel..MaxLevel>
|
||||
* don't allocate the miptree if the teximage won't fit.
|
||||
*/
|
||||
if (!image_matches_texture_obj(texObj, texImage, level))
|
||||
return;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue