Squashed commit of the following:
[mesa.git] / src / mesa / state_tracker / st_texture.c
index 5809927852d4a87e6cd794bba6fa876ab0ab3229..a623eed50ac60ecb591669bc42e8bd64ad0f9544 100644 (file)
@@ -69,12 +69,12 @@ target_to_target(GLenum target)
 
 
 /**
- * Allocate a new pipe_texture object
+ * Allocate a new pipe_resource object
  * width0, height0, depth0 are the dimensions of the level 0 image
  * (the highest resolution).  last_level indicates how many mipmap levels
  * to allocate storage for.  For non-mipmapped textures, this will be zero.
  */
-struct pipe_texture *
+struct pipe_resource *
 st_texture_create(struct st_context *st,
                   enum pipe_texture_target target,
                  enum pipe_format format,
@@ -82,9 +82,9 @@ st_texture_create(struct st_context *st,
                  GLuint width0,
                  GLuint height0,
                  GLuint depth0,
-                  GLuint usage )
+                  GLuint bind )
 {
-   struct pipe_texture pt, *newtex;
+   struct pipe_resource pt, *newtex;
    struct pipe_screen *screen = st->pipe->screen;
 
    assert(target <= PIPE_TEXTURE_CUBE);
@@ -95,7 +95,7 @@ st_texture_create(struct st_context *st,
 
    assert(format);
    assert(screen->is_format_supported(screen, format, target, 
-                                      PIPE_TEXTURE_USAGE_SAMPLER, 0));
+                                      PIPE_BIND_SAMPLER_VIEW, 0));
 
    memset(&pt, 0, sizeof(pt));
    pt.target = target;
@@ -104,9 +104,11 @@ st_texture_create(struct st_context *st,
    pt.width0 = width0;
    pt.height0 = height0;
    pt.depth0 = depth0;
-   pt.tex_usage = usage;
+   pt._usage = PIPE_USAGE_DEFAULT;
+   pt.bind = bind;
+   pt.flags = 0;
 
-   newtex = screen->texture_create(screen, &pt);
+   newtex = screen->resource_create(screen, &pt);
 
    assert(!newtex || pipe_is_referenced(&newtex->reference));
 
@@ -118,7 +120,7 @@ st_texture_create(struct st_context *st,
  * Check if a texture image can be pulled into a unified mipmap texture.
  */
 GLboolean
-st_texture_match_image(const struct pipe_texture *pt,
+st_texture_match_image(const struct pipe_resource *pt,
                        const struct gl_texture_image *image,
                        GLuint face, GLuint level)
 {
@@ -152,7 +154,7 @@ st_texture_match_image(const struct pipe_texture *pt,
  * These functions present that view to mesa:
  */
 const GLuint *
-st_texture_depth_offsets(struct pipe_texture *pt, GLuint level)
+st_texture_depth_offsets(struct pipe_resource *pt, GLuint level)
 {
    static const GLuint zero = 0;
 
@@ -168,7 +170,7 @@ st_texture_depth_offsets(struct pipe_texture *pt, GLuint level)
  * texture memory buffer, in bytes.
  */
 GLuint
-st_texture_image_offset(const struct pipe_texture * pt,
+st_texture_image_offset(const struct pipe_resource * pt,
                         GLuint face, GLuint level)
 {
    if (pt->target == PIPE_TEXTURE_CUBE)
@@ -192,7 +194,7 @@ st_texture_image_map(struct st_context *st, struct st_texture_image *stImage,
                      GLuint x, GLuint y, GLuint w, GLuint h)
 {
    struct pipe_context *pipe = st->pipe;
-   struct pipe_texture *pt = stImage->pt;
+   struct pipe_resource *pt = stImage->pt;
 
    DBG("%s \n", __FUNCTION__);
 
@@ -201,7 +203,7 @@ st_texture_image_map(struct st_context *st, struct st_texture_image *stImage,
                                                    usage, x, y, w, h);
 
    if (stImage->transfer)
-      return pipe->transfer_map(pipe, stImage->transfer);
+      return pipe_transfer_map(pipe, stImage->transfer);
    else
       return NULL;
 }
@@ -215,9 +217,9 @@ st_texture_image_unmap(struct st_context *st,
 
    DBG("%s\n", __FUNCTION__);
 
-   pipe->transfer_unmap(pipe, stImage->transfer);
+   pipe_transfer_unmap(pipe, stImage->transfer);
 
-   pipe->tex_transfer_destroy(pipe, stImage->transfer);
+   pipe->transfer_destroy(pipe, stImage->transfer);
 }
 
 
@@ -237,18 +239,18 @@ st_surface_data(struct pipe_context *pipe,
                const void *src, unsigned src_stride,
                unsigned srcx, unsigned srcy, unsigned width, unsigned height)
 {
-   void *map = pipe->transfer_map(pipe, dst);
+   void *map = pipe_transfer_map(pipe, dst);
 
-   assert(dst->texture);
+   assert(dst->resource);
    util_copy_rect(map,
-                  dst->texture->format,
+                  dst->resource->format,
                   dst->stride,
                   dstx, dsty, 
                   width, height, 
                   src, src_stride, 
                   srcx, srcy);
 
-   pipe->transfer_unmap(pipe, dst);
+   pipe_transfer_unmap(pipe, dst);
 }
 
 
@@ -256,7 +258,7 @@ st_surface_data(struct pipe_context *pipe,
  */
 void
 st_texture_image_data(struct st_context *st,
-                      struct pipe_texture *dst,
+                      struct pipe_resource *dst,
                       GLuint face,
                       GLuint level,
                       void *src,
@@ -284,7 +286,7 @@ st_texture_image_data(struct st_context *st,
                      u_minify(dst->width0, level),
                       u_minify(dst->height0, level));      /* width, height */
 
-      pipe->tex_transfer_destroy(pipe, dst_transfer);
+      pipe->transfer_destroy(pipe, dst_transfer);
 
       srcUB += src_image_stride;
    }
@@ -295,8 +297,8 @@ st_texture_image_data(struct st_context *st,
  */
 void
 st_texture_image_copy(struct pipe_context *pipe,
-                      struct pipe_texture *dst, GLuint dstLevel,
-                      struct pipe_texture *src,
+                      struct pipe_resource *dst, GLuint dstLevel,
+                      struct pipe_resource *src,
                       GLuint face)
 {
    struct pipe_screen *screen = pipe->screen;
@@ -337,10 +339,10 @@ st_texture_image_copy(struct pipe_context *pipe,
 #endif
 
       dst_surface = screen->get_tex_surface(screen, dst, face, dstLevel, i,
-                                            PIPE_BUFFER_USAGE_GPU_WRITE);
+                                            PIPE_BIND_BLIT_DESTINATION);
 
       src_surface = screen->get_tex_surface(screen, src, face, srcLevel, i,
-                                            PIPE_BUFFER_USAGE_GPU_READ);
+                                            PIPE_BIND_BLIT_SOURCE);
 
       pipe->surface_copy(pipe,
                          dst_surface,
@@ -416,7 +418,7 @@ st_bind_texture_surface(struct pipe_surface *ps, int target, int level,
    texImage->TexFormat = st_ChooseTextureFormat(ctx, internalFormat,
                                                 GL_RGBA, GL_UNSIGNED_BYTE);
    _mesa_set_fetch_functions(texImage, 2);
-   pipe_texture_reference(&stImage->pt, ps->texture);
+   pipe_resource_reference(&stImage->pt, ps->texture);
 
    _mesa_dirty_texobj(ctx, texObj, GL_TRUE);
    _mesa_unlock_texture(ctx, texObj);
@@ -466,7 +468,7 @@ st_unbind_texture_surface(struct pipe_surface *ps, int target, int level)
    /* Make sure the pipe surface is still bound.  The texture object is still
     * considered surface based even if this is the last bound surface. */
    if (stImage->pt == ps->texture) {
-      pipe_texture_reference(&stImage->pt, NULL);
+      pipe_resource_reference(&stImage->pt, NULL);
       _mesa_clear_texture_image(ctx, texImage);
 
       _mesa_dirty_texobj(ctx, texObj, GL_TRUE);
@@ -517,20 +519,21 @@ st_bind_teximage(struct st_framebuffer *stfb, uint surfIndex,
    st_flush(ctx->st, PIPE_FLUSH_RENDER_CACHE, NULL);
 
    /* save the renderbuffer's surface/texture info */
-   pipe_texture_reference(&strb->texture_save, strb->texture);
+   pipe_resource_reference(&strb->texture_save, strb->texture);
    pipe_surface_reference(&strb->surface_save, strb->surface);
    pipe_sampler_view_reference(&strb->sampler_view_save, strb->sampler_view);
 
    /* plug in new surface/texture info */
-   pipe_texture_reference(&strb->texture, stImage->pt);
+   pipe_resource_reference(&strb->texture, stImage->pt);
 
    /* XXX: Shouldn't we release reference to old surface here?
     */
 
    strb->surface = screen->get_tex_surface(screen, strb->texture,
                                            face, level, slice,
-                                           (PIPE_BUFFER_USAGE_GPU_READ |
-                                            PIPE_BUFFER_USAGE_GPU_WRITE));
+                                           (PIPE_BIND_RENDER_TARGET |
+                                            PIPE_BIND_BLIT_SOURCE |
+                                           PIPE_BIND_BLIT_DESTINATION));
 
    pipe_sampler_view_reference(&strb->sampler_view, NULL);
 
@@ -562,11 +565,11 @@ st_release_teximage(struct st_framebuffer *stfb, uint surfIndex,
 
    /* free tex surface, restore original */
    pipe_surface_reference(&strb->surface, strb->surface_save);
-   pipe_texture_reference(&strb->texture, strb->texture_save);
+   pipe_resource_reference(&strb->texture, strb->texture_save);
    pipe_sampler_view_reference(&strb->sampler_view, strb->sampler_view_save);
 
    pipe_surface_reference(&strb->surface_save, NULL);
-   pipe_texture_reference(&strb->texture_save, NULL);
+   pipe_resource_reference(&strb->texture_save, NULL);
    pipe_sampler_view_reference(&strb->sampler_view, NULL);
 
    st->dirty.st |= ST_NEW_FRAMEBUFFER;
@@ -576,14 +579,14 @@ st_release_teximage(struct st_framebuffer *stfb, uint surfIndex,
 
 void
 st_teximage_flush_before_map(struct st_context *st,
-                            struct pipe_texture *pt,
+                            struct pipe_resource *pt,
                             unsigned int face,
                             unsigned int level,
                             enum pipe_transfer_usage usage)
 {
    struct pipe_context *pipe = st->pipe;
    unsigned referenced =
-      pipe->is_texture_referenced(pipe, pt, face, level);
+      pipe->is_resource_referenced(pipe, pt, face, level);
 
    if (referenced && ((referenced & PIPE_REFERENCED_FOR_WRITE) ||
                      (usage & PIPE_TRANSFER_WRITE)))