[Mesa-dev] [PATCH 1/2] st/mesa: check for incomplete texture in st_finalize_texture()
Andres Gomez
agomez at igalia.com
Sat Jul 8 14:06:28 UTC 2017
Brian, it looks like we could want this series into -stable (?)
On Wed, 2017-06-28 at 16:12 -0600, Brian Paul wrote:
> Return early from st_finalize_texture() if we have an incomplete
> texture. This avoids trying to create a texture resource with invalid
> parameters (too many mipmap levels given the base dimension).
>
> Specifically, the Piglit fbo-incomplete-texture-03 test winds up
> calling pipe_screen::resource_create() with width0=32, height0=32 and
> last_level=6 because the first five cube faces are 32x32 but the sixth
> face is 64x64. Some drivers handle this, but others (like VMware svga)
> do not (generates device errors).
>
> Note that this code is on the path that's usually not taken (we normally
> build consistent textures).
>
> No Piglit regressions.
> ---
> src/mesa/state_tracker/st_cb_texture.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
> index 9798321..7708443 100644
> --- a/src/mesa/state_tracker/st_cb_texture.c
> +++ b/src/mesa/state_tracker/st_cb_texture.c
> @@ -2543,6 +2543,20 @@ st_finalize_texture(struct gl_context *ctx,
> stObj->base.Target == GL_TEXTURE_CUBE_MAP_ARRAY)
> ptHeight = ptWidth;
> }
> +
> + /* At this point, the texture may be incomplete (mismatched cube
> + * face sizes, for example). If that's the case, give up, but
> + * don't return GL_FALSE as that would raise an incorrect
> + * GL_OUT_OF_MEMORY error. See Piglit fbo-incomplete-texture-03 test.
> + */
> + if (!stObj->base._BaseComplete ||
> + !stObj->base._MipmapComplete) {
> + _mesa_test_texobj_completeness(ctx, &stObj->base);
> + if (!stObj->base._BaseComplete ||
> + !stObj->base._MipmapComplete) {
> + return TRUE;
> + }
> + }
> }
>
> ptNumSamples = firstImage->base.NumSamples;
--
Br,
Andres
More information about the mesa-dev
mailing list