radeonsi: cleanup some #includes
[mesa.git] / src / gallium / drivers / r600 / r600_texture.c
index 9e2d5c7fc9e396bb3f9732c497fd0af2488be358..497da0c3dfaa3a3cb92ef8a808603f64a8643a2d 100644 (file)
@@ -245,7 +245,7 @@ static int r600_init_surface(struct r600_common_screen *rscreen,
        if (!(ptex->flags & R600_RESOURCE_FLAG_FORCE_TILING))
                flags |= RADEON_SURF_OPTIMIZE_FOR_SPACE;
 
-       r = rscreen->ws->surface_init(rscreen->ws, ptex, ptex->nr_samples,
+       r = rscreen->ws->surface_init(rscreen->ws, ptex,
                                      flags, bpe, array_mode, surface);
        if (r) {
                return r;
@@ -366,7 +366,7 @@ static void r600_reallocate_texture_inplace(struct r600_common_context *rctx,
        templ.bind |= new_bind_flag;
 
        /* r600g doesn't react to dirty_tex_descriptor_counter */
-       if (rctx->chip_class < SI)
+       if (rctx->chip_class < GFX6)
                return;
 
        if (rtex->resource.b.is_shared)
@@ -442,6 +442,32 @@ static void r600_reallocate_texture_inplace(struct r600_common_context *rctx,
        p_atomic_inc(&rctx->screen->dirty_tex_counter);
 }
 
+static void r600_texture_get_info(struct pipe_screen* screen,
+                                 struct pipe_resource *resource,
+                                 unsigned *pstride,
+                                 unsigned *poffset)
+{
+       struct r600_common_screen *rscreen = (struct r600_common_screen*)screen;
+       struct r600_texture *rtex = (struct r600_texture*)resource;
+       unsigned stride = 0;
+       unsigned offset = 0;
+
+       if (!rscreen || !rtex)
+               return;
+
+       if (resource->target != PIPE_BUFFER) {
+               offset = rtex->surface.u.legacy.level[0].offset;
+               stride = rtex->surface.u.legacy.level[0].nblk_x *
+                        rtex->surface.bpe;
+       }
+
+       if (pstride)
+               *pstride = stride;
+
+       if (poffset)
+               *poffset = offset;
+}
+
 static boolean r600_texture_get_handle(struct pipe_screen* screen,
                                       struct pipe_context *ctx,
                                       struct pipe_resource *resource,
@@ -500,9 +526,6 @@ static boolean r600_texture_get_handle(struct pipe_screen* screen,
                        rscreen->ws->buffer_set_metadata(res->buf, &metadata);
                }
 
-               offset = rtex->surface.u.legacy.level[0].offset;
-               stride = rtex->surface.u.legacy.level[0].nblk_x *
-                       rtex->surface.bpe;
                slice_size = (uint64_t)rtex->surface.u.legacy.level[0].slice_size_dw * 4;
        } else {
                /* Move a suballocated buffer into a non-suballocated allocation. */
@@ -532,11 +555,11 @@ static boolean r600_texture_get_handle(struct pipe_screen* screen,
                }
 
                /* Buffers */
-               offset = 0;
-               stride = 0;
                slice_size = 0;
        }
 
+       r600_texture_get_info(screen, resource, &stride, &offset);
+
        if (res->b.is_shared) {
                /* USAGE_EXPLICIT_FLUSH must be cleared if at least one user
                 * doesn't set it.
@@ -616,7 +639,7 @@ void r600_texture_get_fmask_info(struct r600_common_screen *rscreen,
                bpe *= 2;
        }
 
-       if (rscreen->ws->surface_init(rscreen->ws, &templ, templ.nr_samples,
+       if (rscreen->ws->surface_init(rscreen->ws, &templ,
                                      flags, bpe, RADEON_SURF_MODE_2D, &fmask)) {
                R600_ERR("Got error in surface_init while allocating FMASK.\n");
                return;
@@ -774,8 +797,8 @@ static void r600_texture_get_htile_size(struct r600_common_screen *rscreen,
                return;
        }
 
-       width = align(rtex->resource.b.b.width0, cl_width * 8);
-       height = align(rtex->resource.b.b.height0, cl_height * 8);
+       width = align(rtex->surface.u.legacy.level[0].nblk_x, cl_width * 8);
+       height = align(rtex->surface.u.legacy.level[0].nblk_y, cl_height * 8);
 
        slice_elements = (width * height) / (8 * 8);
        slice_bytes = slice_elements * 4;
@@ -1108,7 +1131,9 @@ static struct pipe_resource *r600_texture_from_handle(struct pipe_screen *screen
              templ->depth0 != 1 || templ->last_level != 0)
                return NULL;
 
-       buf = rscreen->ws->buffer_from_handle(rscreen->ws, whandle, &stride, &offset);
+       buf = rscreen->ws->buffer_from_handle(rscreen->ws, whandle,
+                                             rscreen->info.max_alignment,
+                                             &stride, &offset);
        if (!buf)
                return NULL;
 
@@ -1239,7 +1264,7 @@ static bool r600_can_invalidate_texture(struct r600_common_screen *rscreen,
                                        const struct pipe_box *box)
 {
        /* r600g doesn't react to dirty_tex_descriptor_counter */
-       return rscreen->chip_class >= SI &&
+       return rscreen->chip_class >= GFX6 &&
                !rtex->resource.b.is_shared &&
                !(transfer_usage & PIPE_TRANSFER_READ) &&
                rtex->resource.b.b.last_level == 0 &&
@@ -1852,6 +1877,7 @@ r600_memobj_from_handle(struct pipe_screen *screen,
                return NULL;
 
        buf = rscreen->ws->buffer_from_handle(rscreen->ws, whandle,
+                                             rscreen->info.max_alignment,
                                              &stride, &offset);
        if (!buf) {
                free(memobj);
@@ -1942,7 +1968,7 @@ r600_texture_from_memobj(struct pipe_screen *screen,
        pb_reference(&buf, memobj->buf);
 
        rtex->resource.b.is_shared = true;
-       rtex->resource.external_usage = PIPE_HANDLE_USAGE_READ_WRITE;
+       rtex->resource.external_usage = PIPE_HANDLE_USAGE_FRAMEBUFFER_WRITE;
 
        if (rscreen->apply_opaque_metadata)
                rscreen->apply_opaque_metadata(rscreen, rtex, &metadata);
@@ -1954,6 +1980,7 @@ void r600_init_screen_texture_functions(struct r600_common_screen *rscreen)
 {
        rscreen->b.resource_from_handle = r600_texture_from_handle;
        rscreen->b.resource_get_handle = r600_texture_get_handle;
+       rscreen->b.resource_get_info = r600_texture_get_info;
        rscreen->b.resource_from_memobj = r600_texture_from_memobj;
        rscreen->b.memobj_create_from_handle = r600_memobj_from_handle;
        rscreen->b.memobj_destroy = r600_memobj_destroy;