diff options
-rw-r--r-- | src/mesa/drivers/common/driverfuncs.c | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i915/intel_fbo.c | 16 | ||||
-rw-r--r-- | src/mesa/main/dd.h | 6 | ||||
-rw-r--r-- | src/mesa/main/fbobject.c | 6 | ||||
-rw-r--r-- | src/mesa/main/teximage.c | 2 | ||||
-rw-r--r-- | src/mesa/main/texrender.c | 16 | ||||
-rw-r--r-- | src/mesa/main/texrender.h | 6 |
7 files changed, 31 insertions, 23 deletions
diff --git a/src/mesa/drivers/common/driverfuncs.c b/src/mesa/drivers/common/driverfuncs.c index 9eb05442be..c554be0743 100644 --- a/src/mesa/drivers/common/driverfuncs.c +++ b/src/mesa/drivers/common/driverfuncs.c @@ -206,7 +206,7 @@ _mesa_init_driver_functions(struct dd_function_table *driver) #if FEATURE_EXT_framebuffer_object driver->NewFramebuffer = _mesa_new_framebuffer; driver->NewRenderbuffer = _mesa_new_soft_renderbuffer; - driver->RenderbufferTexture = _mesa_renderbuffer_texture; + driver->RenderTexture = _mesa_render_texture; driver->FinishRenderTexture = _mesa_finish_render_texture; driver->FramebufferRenderbuffer = _mesa_framebuffer_renderbuffer; #endif diff --git a/src/mesa/drivers/dri/i915/intel_fbo.c b/src/mesa/drivers/dri/i915/intel_fbo.c index fbd23ee773..dbbc1bd9b2 100644 --- a/src/mesa/drivers/dri/i915/intel_fbo.c +++ b/src/mesa/drivers/dri/i915/intel_fbo.c @@ -531,13 +531,15 @@ intel_wrap_texture(GLcontext *ctx, struct gl_texture_image *texImage) /** - * Called via glFramebufferTexture[123]DEXT() to prepare for rendering - * into texture memory. + * Called by glFramebufferTexture[123]DEXT() (and other places) to + * prepare for rendering into texture memory. This might be called + * many times to choose different texture levels, cube faces, etc + * before intel_finish_render_texture() is ever called. */ static void -intel_renderbuffer_texture(GLcontext *ctx, - struct gl_framebuffer *fb, - struct gl_renderbuffer_attachment *att) +intel_render_texture(GLcontext *ctx, + struct gl_framebuffer *fb, + struct gl_renderbuffer_attachment *att) { struct gl_texture_image *newImage = att->Texture->Image[att->CubeMapFace][att->TextureLevel]; @@ -558,7 +560,7 @@ intel_renderbuffer_texture(GLcontext *ctx, } else { /* fallback to software rendering */ - _mesa_renderbuffer_texture(ctx, fb, att); + _mesa_render_texture(ctx, fb, att); return; } } @@ -631,6 +633,6 @@ intel_fbo_init( struct intel_context *intel ) intel->ctx.Driver.NewRenderbuffer = intel_new_renderbuffer; intel->ctx.Driver.BindFramebuffer = intel_bind_framebuffer; intel->ctx.Driver.FramebufferRenderbuffer = intel_framebuffer_renderbuffer; - intel->ctx.Driver.RenderbufferTexture = intel_renderbuffer_texture; + intel->ctx.Driver.RenderTexture = intel_render_texture; intel->ctx.Driver.FinishRenderTexture = intel_finish_render_texture; } diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index bc22b8dbc2..4f1a962731 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -807,9 +807,9 @@ struct dd_function_table { struct gl_framebuffer *fb, GLenum attachment, struct gl_renderbuffer *rb); - void (*RenderbufferTexture)(GLcontext *ctx, - struct gl_framebuffer *fb, - struct gl_renderbuffer_attachment *att); + void (*RenderTexture)(GLcontext *ctx, + struct gl_framebuffer *fb, + struct gl_renderbuffer_attachment *att); void (*FinishRenderTexture)(GLcontext *ctx, struct gl_renderbuffer_attachment *att); /*@}*/ diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index 569979791b..fdc1ad300b 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -210,7 +210,7 @@ _mesa_set_texture_attachment(GLcontext *ctx, att->Complete = GL_FALSE; if (att->Texture->Image[att->CubeMapFace][att->TextureLevel]) { - ctx->Driver.RenderbufferTexture(ctx, fb, att); + ctx->Driver.RenderTexture(ctx, fb, att); } } @@ -918,12 +918,12 @@ static void check_begin_texture_render(GLcontext *ctx, struct gl_framebuffer *fb) { GLuint i; - ASSERT(ctx->Driver.RenderbufferTexture); + ASSERT(ctx->Driver.RenderTexture); for (i = 0; i < BUFFER_COUNT; i++) { struct gl_renderbuffer_attachment *att = fb->Attachment + i; struct gl_texture_object *texObj = att->Texture; if (texObj) { - ctx->Driver.RenderbufferTexture(ctx, fb, att); + ctx->Driver.RenderTexture(ctx, fb, att); } } } diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 385297b3f5..ff1d51d7d0 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -2172,7 +2172,7 @@ update_fbo_texture(GLcontext *ctx, struct gl_texture_object *texObj, att->CubeMapFace == face) { ASSERT(att->Texture->Image[att->CubeMapFace][att->TextureLevel]); /* Tell driver about the new renderbuffer texture */ - ctx->Driver.RenderbufferTexture(ctx, ctx->DrawBuffer, att); + ctx->Driver.RenderTexture(ctx, ctx->DrawBuffer, att); } } } diff --git a/src/mesa/main/texrender.c b/src/mesa/main/texrender.c index 01e6d6748a..b01e63b781 100644 --- a/src/mesa/main/texrender.c +++ b/src/mesa/main/texrender.c @@ -163,7 +163,6 @@ wrap_texture(GLcontext *ctx, struct gl_renderbuffer_attachment *att) trb->Zoffset = att->Zoffset; - trb->Base.RefCount = 1; trb->Base.Width = trb->TexImage->Width; trb->Base.Height = trb->TexImage->Height; trb->Base.InternalFormat = trb->TexImage->InternalFormat; /* XXX fix? */ @@ -201,7 +200,8 @@ wrap_texture(GLcontext *ctx, struct gl_renderbuffer_attachment *att) /** - * Called when rendering to a texture image begins. + * Called when rendering to a texture image begins, or when changing + * the dest mipmap level, cube face, etc. * This is a fallback routine for software render-to-texture. * * Called via the glRenderbufferTexture1D/2D/3D() functions @@ -217,9 +217,9 @@ wrap_texture(GLcontext *ctx, struct gl_renderbuffer_attachment *att) * \sa _mesa_framebuffer_renderbuffer */ void -_mesa_renderbuffer_texture(GLcontext *ctx, - struct gl_framebuffer *fb, - struct gl_renderbuffer_attachment *att) +_mesa_render_texture(GLcontext *ctx, + struct gl_framebuffer *fb, + struct gl_renderbuffer_attachment *att) { struct gl_texture_image *newImage = att->Texture->Image[att->CubeMapFace][att->TextureLevel]; @@ -246,10 +246,16 @@ void _mesa_finish_render_texture(GLcontext *ctx, struct gl_renderbuffer_attachment *att) { + /* do nothing */ + /* The renderbuffer texture wrapper will get deleted by the + * normal mechanism for deleting renderbuffers. + */ +#if 0 if (att->Renderbuffer) { att->Renderbuffer->RefCount--; } if (att->Renderbuffer->RefCount <= 0) { _mesa_debug(ctx, "%s refcount == 0!\n", __FUNCTION__); } +#endif } diff --git a/src/mesa/main/texrender.h b/src/mesa/main/texrender.h index 575d84415f..7c3fb0871b 100644 --- a/src/mesa/main/texrender.h +++ b/src/mesa/main/texrender.h @@ -3,9 +3,9 @@ extern void -_mesa_renderbuffer_texture(GLcontext *ctx, - struct gl_framebuffer *fb, - struct gl_renderbuffer_attachment *att); +_mesa_render_texture(GLcontext *ctx, + struct gl_framebuffer *fb, + struct gl_renderbuffer_attachment *att); extern void _mesa_finish_render_texture(GLcontext *ctx, |