diff options
| author | marha <marha@users.sourceforge.net> | 2011-09-26 17:04:30 +0200 | 
|---|---|---|
| committer | marha <marha@users.sourceforge.net> | 2011-09-26 17:04:30 +0200 | 
| commit | 873965b49f283ad028dd4e0e5b7e93a758c84993 (patch) | |
| tree | 84122d76cb641b54ea85cee9b631fb51c25052b5 /mesalib/src/mesa/state_tracker | |
| parent | c1e6c7428a8d2c1b60ffac7df7a3f56c300fa983 (diff) | |
| download | vcxsrv-873965b49f283ad028dd4e0e5b7e93a758c84993.tar.gz vcxsrv-873965b49f283ad028dd4e0e5b7e93a758c84993.tar.bz2 vcxsrv-873965b49f283ad028dd4e0e5b7e93a758c84993.zip | |
fontconfig libX11 libXext libXft libXmu mesa git update 26 sep 2011
Diffstat (limited to 'mesalib/src/mesa/state_tracker')
| -rw-r--r-- | mesalib/src/mesa/state_tracker/st_cb_fbo.c | 9 | ||||
| -rw-r--r-- | mesalib/src/mesa/state_tracker/st_cb_texture.c | 6 | ||||
| -rw-r--r-- | mesalib/src/mesa/state_tracker/st_texture.c | 21 | ||||
| -rw-r--r-- | mesalib/src/mesa/state_tracker/st_texture.h | 3 | 
4 files changed, 22 insertions, 17 deletions
| diff --git a/mesalib/src/mesa/state_tracker/st_cb_fbo.c b/mesalib/src/mesa/state_tracker/st_cb_fbo.c index d43f67ac9..05139ec5a 100644 --- a/mesalib/src/mesa/state_tracker/st_cb_fbo.c +++ b/mesalib/src/mesa/state_tracker/st_cb_fbo.c @@ -47,6 +47,7 @@  #include "st_context.h"  #include "st_cb_fbo.h"  #include "st_cb_flush.h" +#include "st_cb_texture.h"  #include "st_format.h"  #include "st_texture.h"  #include "st_manager.h" @@ -340,15 +341,17 @@ st_render_texture(struct gl_context *ctx,     struct pipe_context *pipe = st->pipe;     struct st_renderbuffer *strb;     struct gl_renderbuffer *rb; -   struct pipe_resource *pt = st_get_texobj_resource(att->Texture); +   struct pipe_resource *pt;     struct st_texture_object *stObj;     const struct gl_texture_image *texImage;     struct pipe_surface surf_tmpl; -   /* When would this fail?  Perhaps assert? */ -   if (!pt)  +   if (!st_finalize_texture(ctx, pipe, att->Texture))        return; +   pt = st_get_texobj_resource(att->Texture); +   assert(pt); +     /* get pointer to texture image we're rendeing to */     texImage = _mesa_get_attachment_teximage(att); diff --git a/mesalib/src/mesa/state_tracker/st_cb_texture.c b/mesalib/src/mesa/state_tracker/st_cb_texture.c index 97c1fabd5..e744a9f0d 100644 --- a/mesalib/src/mesa/state_tracker/st_cb_texture.c +++ b/mesalib/src/mesa/state_tracker/st_cb_texture.c @@ -577,8 +577,7 @@ st_TexImage(struct gl_context * ctx,      */     if (stObj->pt) {        if (level > (GLint) stObj->pt->last_level || -          !st_texture_match_image(stObj->pt, &stImage->base, -                                  stImage->base.Face, stImage->base.Level)) { +          !st_texture_match_image(stObj->pt, &stImage->base)) {           DBG("release it\n");           pipe_resource_reference(&stObj->pt, NULL);           assert(!stObj->pt); @@ -611,8 +610,7 @@ st_TexImage(struct gl_context * ctx,      * in its own buffer.      */     if (stObj->pt && -       st_texture_match_image(stObj->pt, &stImage->base, -                              stImage->base.Face, stImage->base.Level)) { +       st_texture_match_image(stObj->pt, &stImage->base)) {        pipe_resource_reference(&stImage->pt, stObj->pt);        assert(stImage->pt); diff --git a/mesalib/src/mesa/state_tracker/st_texture.c b/mesalib/src/mesa/state_tracker/st_texture.c index c5dc7dcc4..c18268829 100644 --- a/mesalib/src/mesa/state_tracker/st_texture.c +++ b/mesalib/src/mesa/state_tracker/st_texture.c @@ -170,8 +170,7 @@ st_gl_texture_dims_to_pipe_dims(GLenum texture,   */  GLboolean  st_texture_match_image(const struct pipe_resource *pt, -                       const struct gl_texture_image *image, -                       GLuint face, GLuint level) +                       const struct gl_texture_image *image)  {     GLuint ptWidth, ptHeight, ptDepth, ptLayers; @@ -192,9 +191,9 @@ st_texture_match_image(const struct pipe_resource *pt,     /* Test if this image's size matches what's expected in the      * established texture.      */ -   if (ptWidth != u_minify(pt->width0, level) || -       ptHeight != u_minify(pt->height0, level) || -       ptDepth != u_minify(pt->depth0, level) || +   if (ptWidth != u_minify(pt->width0, image->Level) || +       ptHeight != u_minify(pt->height0, image->Level) || +       ptDepth != u_minify(pt->depth0, image->Level) ||         ptLayers != pt->array_size)        return GL_FALSE; @@ -366,9 +365,15 @@ st_texture_image_copy(struct pipe_context *pipe,     struct pipe_box src_box;     GLuint i; -   assert(u_minify(src->width0, srcLevel) == width); -   assert(u_minify(src->height0, srcLevel) == height); -   assert(u_minify(src->depth0, srcLevel) == depth); +   if (u_minify(src->width0, srcLevel) != width || +       u_minify(src->height0, srcLevel) != height || +       u_minify(src->depth0, srcLevel) != depth) { +      /* The source image size doesn't match the destination image size. +       * This can happen in some degenerate situations such as rendering to a +       * cube map face which was set up with mismatched texture sizes. +       */ +      return; +   }     src_box.x = 0;     src_box.y = 0; diff --git a/mesalib/src/mesa/state_tracker/st_texture.h b/mesalib/src/mesa/state_tracker/st_texture.h index 50b7284e7..dd3bc7310 100644 --- a/mesalib/src/mesa/state_tracker/st_texture.h +++ b/mesalib/src/mesa/state_tracker/st_texture.h @@ -184,8 +184,7 @@ st_gl_texture_dims_to_pipe_dims(GLenum texture,   */  extern GLboolean  st_texture_match_image(const struct pipe_resource *pt, -                       const struct gl_texture_image *image, -                       GLuint face, GLuint level); +                       const struct gl_texture_image *image);  /* Return a pointer to an image within a texture.  Return image stride as   * well. | 
