diff options
Diffstat (limited to 'src/mesa/state_tracker')
-rw-r--r-- | src/mesa/state_tracker/st_cb_bitmap.c | 3 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_fbo.c | 14 |
2 files changed, 13 insertions, 4 deletions
diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c index 85420a950f..25430bba77 100644 --- a/src/mesa/state_tracker/st_cb_bitmap.c +++ b/src/mesa/state_tracker/st_cb_bitmap.c @@ -637,7 +637,7 @@ accum_bitmap(struct st_context *st, const GLubyte *bitmap ) { struct bitmap_cache *cache = st->bitmap.cache; - int px = -999, py; + int px = -999, py = -999; const GLfloat z = st->ctx->Current.RasterPos[2]; if (width > BITMAP_CACHE_WIDTH || @@ -671,6 +671,7 @@ accum_bitmap(struct st_context *st, } assert(px != -999); + assert(py != -999); if (x < cache->xmin) cache->xmin = x; diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index 9f2fe7420d..4638879fc2 100644 --- a/src/mesa/state_tracker/st_cb_fbo.c +++ b/src/mesa/state_tracker/st_cb_fbo.c @@ -37,6 +37,7 @@ #include "main/context.h" #include "main/fbobject.h" #include "main/framebuffer.h" +#include "main/macros.h" #include "main/renderbuffer.h" #include "pipe/p_context.h" @@ -340,12 +341,17 @@ st_render_texture(GLcontext *ctx, struct gl_renderbuffer *rb; struct pipe_texture *pt = st_get_texobj_texture(att->Texture); struct st_texture_object *stObj; - const struct gl_texture_image *texImage = - att->Texture->Image[att->CubeMapFace][att->TextureLevel]; + const struct gl_texture_image *texImage; + GLint pt_level; + /* When would this fail? Perhaps assert? */ if (!pt) return; + /* The first gallium texture level = Mesa BaseLevel */ + pt_level = MAX2(0, (GLint) att->TextureLevel - att->Texture->BaseLevel); + texImage = att->Texture->Image[att->CubeMapFace][pt_level]; + /* create new renderbuffer which wraps the texture image */ rb = st_new_renderbuffer(ctx, 0); if (!rb) { @@ -365,7 +371,7 @@ st_render_texture(GLcontext *ctx, /* point renderbuffer at texobject */ strb->rtt = stObj; - strb->rtt_level = att->TextureLevel; + strb->rtt_level = pt_level; strb->rtt_face = att->CubeMapFace; strb->rtt_slice = att->Zoffset; @@ -380,6 +386,8 @@ st_render_texture(GLcontext *ctx, pipe_surface_reference(&strb->surface, NULL); + assert(strb->rtt_level <= strb->texture->last_level); + /* new surface for rendering into the texture */ strb->surface = screen->get_tex_surface(screen, strb->texture, |