gallium: Have pipe_buffer_* receive a pipe_screen instead of a pipe_context.
[mesa.git] / src / mesa / state_tracker / st_gen_mipmap.c
index 5f09d9bb0663bddad2af6dd86a02fb05017c426a..b9d114b1c97c982b9847628b69fac53a3cadf0f0 100644 (file)
@@ -36,7 +36,6 @@
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
 #include "pipe/p_inlines.h"
-#include "pipe/p_winsys.h"
 #include "util/u_gen_mipmap.h"
 
 #include "cso_cache/cso_cache.h"
@@ -47,7 +46,6 @@
 #include "st_gen_mipmap.h"
 #include "st_program.h"
 #include "st_texture.h"
-#include "st_cb_drawpixels.h"
 #include "st_cb_texture.h"
 
 
 void
 st_init_generate_mipmap(struct st_context *st)
 {
-   st->gen_mipmap = util_create_gen_mipmap(st->pipe);
+   st->gen_mipmap = util_create_gen_mipmap(st->pipe, st->cso_context);
 }
 
 
 void
-st_destroy_generate_mipmpap(struct st_context *st)
+st_destroy_generate_mipmap(struct st_context *st)
 {
    util_destroy_gen_mipmap(st->gen_mipmap);
    st->gen_mipmap = NULL;
@@ -88,25 +86,13 @@ st_render_mipmap(struct st_context *st,
    assert(target != GL_TEXTURE_3D); /* not done yet */
 
    /* check if we can render in the texture's format */
-   if (!screen->is_format_supported(screen, pt->format, PIPE_SURFACE)) {
+   if (!screen->is_format_supported(screen, pt->format, target,
+                                    PIPE_TEXTURE_USAGE_RENDER_TARGET, 0)) {
       return FALSE;
    }
 
-   util_gen_mipmap(st->gen_mipmap, pt, face, baseLevel, lastLevel);
-
-   /* restore pipe state */
-#if 0
-   cso_set_rasterizer(st->cso_context, &st->state.rasterizer);
-   cso_set_samplers(st->cso_context, st->state.samplers_list);
-   pipe->bind_fs_state(pipe, st->fp->shader_program);
-   pipe->bind_vs_state(pipe, st->vp->shader_program);
-   pipe->set_sampler_textures(pipe, st->state.num_textures,
-                              st->state.sampler_texture);
-   pipe->set_viewport_state(pipe, &st->state.viewport);
-#else
-   /* XXX is this sufficient? */
-   st_invalidate_state(st->ctx, _NEW_COLOR | _NEW_TEXTURE);
-#endif
+   util_gen_mipmap(st->gen_mipmap, pt, face, baseLevel, lastLevel,
+                   PIPE_TEX_FILTER_LINEAR);
 
    return TRUE;
 }
@@ -118,7 +104,6 @@ fallback_generate_mipmap(GLcontext *ctx, GLenum target,
 {
    struct pipe_context *pipe = ctx->st->pipe;
    struct pipe_screen *screen = pipe->screen;
-   struct pipe_winsys *ws = pipe->winsys;
    struct pipe_texture *pt = st_get_texobj_texture(texObj);
    const uint baseLevel = texObj->BaseLevel;
    const uint lastLevel = pt->last_level;
@@ -138,27 +123,29 @@ fallback_generate_mipmap(GLcontext *ctx, GLenum target,
       const ubyte *srcData;
       ubyte *dstData;
 
-      srcSurf = screen->get_tex_surface(screen, pt, face, srcLevel, zslice);
-      dstSurf = screen->get_tex_surface(screen, pt, face, dstLevel, zslice);
+      srcSurf = screen->get_tex_surface(screen, pt, face, srcLevel, zslice,
+                                        PIPE_BUFFER_USAGE_CPU_READ);
+      dstSurf = screen->get_tex_surface(screen, pt, face, dstLevel, zslice,
+                                        PIPE_BUFFER_USAGE_CPU_WRITE);
 
-      srcData = (ubyte *) ws->buffer_map(ws, srcSurf->buffer,
-                                         PIPE_BUFFER_USAGE_CPU_READ)
+      srcData = (ubyte *) pipe_buffer_map(pipe->screen, srcSurf->buffer,
+                                          PIPE_BUFFER_USAGE_CPU_READ)
               + srcSurf->offset;
-      dstData = (ubyte *) ws->buffer_map(ws, dstSurf->buffer,
-                                         PIPE_BUFFER_USAGE_CPU_WRITE)
+      dstData = (ubyte *) pipe_buffer_map(pipe->screen, dstSurf->buffer,
+                                          PIPE_BUFFER_USAGE_CPU_WRITE)
               + dstSurf->offset;
 
       _mesa_generate_mipmap_level(target, datatype, comps,
                    0 /*border*/,
                    pt->width[srcLevel], pt->height[srcLevel], pt->depth[srcLevel],
-                   srcSurf->pitch * srcSurf->cpp, /* stride in bytes */
+                   srcSurf->stride, /* stride in bytes */
                    srcData,
                    pt->width[dstLevel], pt->height[dstLevel], pt->depth[dstLevel],
-                   dstSurf->pitch * dstSurf->cpp, /* stride in bytes */
+                   dstSurf->stride, /* stride in bytes */
                    dstData);
 
-      ws->buffer_unmap(ws, srcSurf->buffer);
-      ws->buffer_unmap(ws, dstSurf->buffer);
+      pipe_buffer_unmap(pipe->screen, srcSurf->buffer);
+      pipe_buffer_unmap(pipe->screen, dstSurf->buffer);
 
       pipe_surface_reference(&srcSurf, NULL);
       pipe_surface_reference(&dstSurf, NULL);
@@ -212,6 +199,6 @@ st_generate_mipmap(GLcontext *ctx, GLenum target,
       dstImage->TexFormat = srcImage->TexFormat;
 
       stImage = (struct st_texture_image *) dstImage;
-      stImage->pt = pt;
+      pipe_texture_reference(&stImage->pt, pt);
    }
 }