[Mesa-dev] [PATCH 2/2] st/mesa: fix texture image resource selection in st_render_texture()
Nicolai Hähnle
nhaehnle at gmail.com
Sat Jul 1 10:56:32 UTC 2017
On 29.06.2017 00:12, Brian Paul wrote:
> If we're rendering to an incomplete/inconsistent (cube) texture, the
> different faces/levels of the texture may be stored in different
> resources. Before, we always used the texture object resource. Now,
> we use the texture image resource. In normal circumstances, that's
> the same resource. But in some cases, such as the Piglit
> fbo-incomplete-texture-03 test, the cube faces are in different
> resources and we need to render to the texture image resource.
>
> Fixes fbo-incomplete-texture-03 with VMware driver.
> ---
> src/mesa/state_tracker/st_cb_fbo.c | 19 ++++++++++++++++++-
> 1 file changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
> index 2559c23..a4d710c 100644
> --- a/src/mesa/state_tracker/st_cb_fbo.c
> +++ b/src/mesa/state_tracker/st_cb_fbo.c
> @@ -470,6 +470,21 @@ st_update_renderbuffer_surface(struct st_context *st,
> strb->surface = *psurf;
> }
>
> +
> +/**
> + * Return the pipe_resource which stores a particular texture image.
> + */
> +static struct pipe_resource *
> +get_teximage_resource(struct gl_texture_object *texObj,
> + unsigned face, unsigned level)
> +{
> + struct st_texture_image *stImg =
> + st_texture_image(texObj->Image[face][level]);
> +
> + return stImg->pt;
> +}
> +
> +
> /**
> * Called by ctx->Driver.RenderTexture
> */
> @@ -487,7 +502,9 @@ st_render_texture(struct gl_context *ctx,
> if (!st_finalize_texture(ctx, pipe, att->Texture, att->CubeMapFace))
> return;
>
> - pt = st_get_texobj_resource(att->Texture);
> + pt = get_teximage_resource(att->Texture,
> + att->CubeMapFace,
> + att->TextureLevel);
When st_AllocTextureImageBuffer allocates a pipe resource for a "loose"
image, it allocates a single level, even if the image is not a mip level
0. So I wonder if we need to adjust the level selection in the
pipe_surface somehow. Is this covered by the incomplete texture tests?
Cheers,
Nicolai
> assert(pt);
>
> /* point renderbuffer at texobject */
>
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
More information about the mesa-dev
mailing list