Mesa (master): st/mesa: fix texture image resource selection in st_render_texture()

Brian Paul brianp at kemper.freedesktop.org
Fri Jun 30 20:03:10 UTC 2017


Module: Mesa
Branch: master
Commit: 95d5c48f68b598cfa6db25f44aac52b3e11403cc
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=95d5c48f68b598cfa6db25f44aac52b3e11403cc

Author: Brian Paul <brianp at vmware.com>
Date:   Tue Jun 27 09:36:19 2017 -0600

st/mesa: fix texture image resource selection in st_render_texture()

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.

Reviewed-by: Roland Scheidegger <sroland at vmware.com>

---

 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 2559c239ed..a4d710c5dc 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);
    assert(pt);
 
    /* point renderbuffer at texobject */




More information about the mesa-commit mailing list