st/mesa: use private pipe_sampler_view in st_render_mipmap()
authorBrian Paul <brianp@vmware.com>
Mon, 13 Feb 2012 21:46:11 +0000 (14:46 -0700)
committerBrian Paul <brianp@vmware.com>
Wed, 15 Feb 2012 21:09:01 +0000 (14:09 -0700)
Rather than the one in st_texture_object.  This sampler view really has
no connection to the one used for rendering.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/mesa/state_tracker/st_gen_mipmap.c

index d817a9c2b16c5c90803a1dd0f1b535ba70b1abe8..d3496642f542cb3245143b3b4526c42e5c51add4 100644 (file)
@@ -75,10 +75,9 @@ st_render_mipmap(struct st_context *st,
 {
    struct pipe_context *pipe = st->pipe;
    struct pipe_screen *screen = pipe->screen;
-   struct pipe_sampler_view *psv = st_get_texture_sampler_view(stObj, pipe);
+   struct pipe_sampler_view *psv;
    const uint face = _mesa_tex_target_to_face(target);
 
-   assert(psv->texture == stObj->pt);
 #if 0
    assert(target != GL_TEXTURE_3D); /* implemented but untested */
 #endif
@@ -86,11 +85,14 @@ st_render_mipmap(struct st_context *st,
    /* check if we can render in the texture's format */
    /* XXX should probably kill this and always use util_gen_mipmap
       since this implements a sw fallback as well */
-   if (!screen->is_format_supported(screen, psv->format, psv->texture->target,
+   if (!screen->is_format_supported(screen, stObj->pt->format,
+                                    stObj->pt->target,
                                     0, PIPE_BIND_RENDER_TARGET)) {
       return FALSE;
    }
 
+   psv = st_create_texture_sampler_view(pipe, stObj->pt);
+
    /* Disable conditional rendering. */
    if (st->render_condition) {
       pipe->render_condition(pipe, NULL, 0);
@@ -103,6 +105,8 @@ st_render_mipmap(struct st_context *st,
       pipe->render_condition(pipe, st->render_condition, st->condition_mode);
    }
 
+   pipe_sampler_view_reference(&psv, NULL);
+
    return TRUE;
 }