vc4: Use vc4_setup_slices for resource import

Rather than open-coding populating the first slice inside resource
import, use vc4_setup_slices to do it for us.

v2: Rebase on VC4_DEBUG=surf change

Reviewed-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
Eric Anholt 2017-06-22 19:45:08 +01:00
parent 111b6b77cb
commit bb466a996f
1 changed files with 19 additions and 33 deletions

View File

@ -421,7 +421,7 @@ vc4_resource_get_handle(struct pipe_screen *pscreen,
}
static void
vc4_setup_slices(struct vc4_resource *rsc)
vc4_setup_slices(struct vc4_resource *rsc, const char *caller)
{
struct pipe_resource *prsc = &rsc->base;
uint32_t width = prsc->width0;
@ -487,9 +487,9 @@ vc4_setup_slices(struct vc4_resource *rsc)
[VC4_TILING_FORMAT_T] = 'T'
};
fprintf(stderr,
"rsc setup %p (format %s: vc4 %d), %dx%d: "
"rsc %s %p (format %s: vc4 %d), %dx%d: "
"level %d (%c) -> %dx%d, stride %d@0x%08x\n",
rsc,
caller, rsc,
util_format_short_name(prsc->format),
rsc->vc4_format,
prsc->width0, prsc->height0,
@ -586,7 +586,7 @@ vc4_resource_create(struct pipe_screen *pscreen,
if (tmpl->target != PIPE_BUFFER)
rsc->vc4_format = get_resource_texture_format(prsc);
vc4_setup_slices(rsc);
vc4_setup_slices(rsc, "create");
if (!vc4_resource_bo_alloc(rsc))
goto fail;
@ -613,29 +613,10 @@ vc4_resource_from_handle(struct pipe_screen *pscreen,
struct vc4_resource *rsc = vc4_resource_setup(pscreen, tmpl);
struct pipe_resource *prsc = &rsc->base;
struct vc4_resource_slice *slice = &rsc->slices[0];
uint32_t expected_stride =
align(prsc->width0, vc4_utile_width(rsc->cpp)) * rsc->cpp;
if (!rsc)
return NULL;
if (whandle->stride != expected_stride) {
static bool warned = false;
if (!warned) {
warned = true;
fprintf(stderr,
"Attempting to import %dx%d %s with "
"unsupported stride %d instead of %d\n",
prsc->width0, prsc->height0,
util_format_short_name(prsc->format),
whandle->stride,
expected_stride);
}
goto fail;
}
rsc->tiled = false;
if (whandle->offset != 0) {
fprintf(stderr,
"Attempt to import unsupported winsys offset %u\n",
@ -661,10 +642,9 @@ vc4_resource_from_handle(struct pipe_screen *pscreen,
if (!rsc->bo)
goto fail;
slice->stride = whandle->stride;
slice->tiling = VC4_TILING_FORMAT_LINEAR;
rsc->tiled = false;
rsc->vc4_format = get_resource_texture_format(prsc);
vc4_setup_slices(rsc, "import");
if (screen->ro) {
/* Make sure that renderonly has a handle to our buffer in the
@ -678,13 +658,19 @@ vc4_resource_from_handle(struct pipe_screen *pscreen,
goto fail;
}
if (vc4_debug & VC4_DEBUG_SURFACE) {
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);
if (whandle->stride != slice->stride) {
static bool warned = false;
if (!warned) {
warned = true;
fprintf(stderr,
"Attempting to import %dx%d %s with "
"unsupported stride %d instead of %d\n",
prsc->width0, prsc->height0,
util_format_short_name(prsc->format),
whandle->stride,
slice->stride);
}
goto fail;
}
return prsc;