#include "vc4_resource.h"
#include "vc4_tiling.h"
+static bool miptree_debug = false;
+
static void
vc4_resource_bo_alloc(struct vc4_resource *rsc)
{
struct pipe_resource *prsc = &rsc->base.b;
struct pipe_screen *pscreen = prsc->screen;
+ if (miptree_debug) {
+ fprintf(stderr, "alloc %p: size %d + offset %d -> %d\n",
+ rsc,
+ rsc->slices[0].size,
+ rsc->slices[0].offset,
+ rsc->slices[0].offset +
+ rsc->slices[0].size +
+ rsc->cube_map_stride * (prsc->array_size - 1));
+ }
+
vc4_bo_unreference(&rsc->bo);
rsc->bo = vc4_bo_alloc(vc4_screen(pscreen),
rsc->slices[0].offset +
level_height = u_minify(pot_height, i);
}
- if (rsc->tiled == VC4_TILING_FORMAT_LINEAR) {
+ if (!rsc->tiled) {
slice->tiling = VC4_TILING_FORMAT_LINEAR;
level_width = align(level_width, 16);
} else {
slice->size = level_height * slice->stride;
offset += slice->size;
+
+ if (miptree_debug) {
+ static const char tiling_chars[] = {
+ [VC4_TILING_FORMAT_LINEAR] = 'R',
+ [VC4_TILING_FORMAT_LT] = 'L',
+ [VC4_TILING_FORMAT_T] = 'T'
+ };
+ fprintf(stderr,
+ "rsc setup %p (format %d), %dx%d: "
+ "level %d (%c) -> %dx%d, stride %d@0x%08x\n",
+ rsc, rsc->vc4_format,
+ prsc->width0, prsc->height0,
+ i, tiling_chars[slice->tiling],
+ level_width, level_height,
+ slice->stride, slice->offset);
+ }
}
/* The texture base pointer that has to point to level 0 doesn't have
rsc->tiled = true;
}
+ if (tmpl->target != PIPE_BUFFER)
+ rsc->vc4_format = get_resource_texture_format(prsc);
+
vc4_setup_slices(rsc);
vc4_resource_bo_alloc(rsc);
if (!rsc->bo)
goto fail;
- if (tmpl->target != PIPE_BUFFER)
- rsc->vc4_format = get_resource_texture_format(prsc);
-
return prsc;
fail:
vc4_resource_destroy(pscreen, prsc);
if (!rsc->bo)
goto fail;
-#ifdef USE_VC4_SIMULATOR
- slice->stride = align(prsc->width0 * rsc->cpp, 16);
-#else
- slice->stride = handle->stride;
-#endif
+ if (!using_vc4_simulator)
+ slice->stride = handle->stride;
+ else
+ slice->stride = align(prsc->width0 * rsc->cpp, 16);
+
slice->tiling = VC4_TILING_FORMAT_LINEAR;
rsc->vc4_format = get_resource_texture_format(prsc);
+ if (miptree_debug) {
+ fprintf(stderr,
+ "rsc import %p (format %d), %dx%d: "
+ "level 0 (R) -> stride %d@0x%08x\n",
+ rsc, rsc->vc4_format,
+ prsc->width0, prsc->height0,
+ slice->stride, slice->offset);
+ }
+
return prsc;
fail: