diff options
Diffstat (limited to 'src/mesa/state_tracker/st_cb_texture.c')
-rw-r--r-- | src/mesa/state_tracker/st_cb_texture.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index 4c3e3688dd..9eb14033ee 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -74,9 +74,11 @@ gl_target_to_pipe(GLenum target) return PIPE_TEXTURE_1D; case GL_TEXTURE_2D: - case GL_TEXTURE_RECTANGLE_NV: return PIPE_TEXTURE_2D; + case GL_TEXTURE_RECTANGLE_NV: + return PIPE_TEXTURE_RECT; + case GL_TEXTURE_3D: return PIPE_TEXTURE_3D; @@ -449,7 +451,7 @@ compress_with_blit(GLcontext * ctx, /* Create the temporary source texture */ memset(&templ, 0, sizeof(templ)); - templ.target = PIPE_TEXTURE_2D; + templ.target = st->internal_target; templ.format = st_mesa_format_to_pipe_format(mesa_format); templ.width0 = width; templ.height0 = height; @@ -546,6 +548,14 @@ st_TexImage(GLcontext * ctx, /* switch to "normal" */ if (stObj->surface_based) { _mesa_clear_texture_object(ctx, texObj); + pipe_resource_reference(&stObj->pt, NULL); + + /* oops, need to init this image again */ + _mesa_init_teximage_fields(ctx, target, texImage, + width, height, depth, border, internalFormat); + _mesa_choose_texture_format(ctx, texObj, texImage, target, level, + internalFormat, format, type); + stObj->surface_based = GL_FALSE; } |