int count)
{
struct lima_screen *screen = lima_screen(pscreen);
- bool should_tile = true;
+ bool should_tile = lima_debug & LIMA_DEBUG_NO_TILING ? false : true;
unsigned width, height;
bool should_align_dimensions;
bool has_user_modifiers = true;
if (templat->bind & (PIPE_BIND_LINEAR | PIPE_BIND_SCANOUT))
should_tile = false;
+ /* If there's no user modifiers and buffer is shared we use linear */
+ if (!has_user_modifiers && (templat->bind & PIPE_BIND_SHARED))
+ should_tile = false;
+
if (drm_find_modifier(DRM_FORMAT_MOD_LINEAR, modifiers, count))
should_tile = false;
res->tiled = true;
break;
case DRM_FORMAT_MOD_INVALID:
- res->tiled = screen->ro == NULL;
+ /* Modifier wasn't specified and it's shared buffer. We create these
+ * as linear, so disable tiling.
+ */
+ res->tiled = false;
break;
default:
fprintf(stderr, "Attempted to import unsupported modifier 0x%llx\n",
* range, so no need to sync */
if (pres->usage != PIPE_USAGE_STREAM) {
if (usage & PIPE_TRANSFER_READ_WRITE) {
- if (lima_need_flush(ctx, bo, usage & PIPE_TRANSFER_WRITE))
- lima_flush(ctx);
+ lima_flush_submit_accessing_bo(ctx, bo, usage & PIPE_TRANSFER_WRITE);
unsigned op = usage & PIPE_TRANSFER_WRITE ?
LIMA_GEM_WAIT_WRITE : LIMA_GEM_WAIT_READ;
panfrost_load_tiled_image(
trans->staging + i * ptrans->stride * ptrans->box.height,
bo->map + res->levels[level].offset + (i + box->z) * res->levels[level].layer_stride,
- &ptrans->box,
+ ptrans->box.x, ptrans->box.y,
+ ptrans->box.width, ptrans->box.height,
ptrans->stride,
res->levels[level].stride,
- util_format_get_blocksize(pres->format));
+ pres->format);
}
return trans->staging;
panfrost_store_tiled_image(
bo->map + res->levels[ptrans->level].offset + (i + ptrans->box.z) * res->levels[ptrans->level].layer_stride,
trans->staging + i * ptrans->stride * ptrans->box.height,
- &ptrans->box,
+ ptrans->box.x, ptrans->box.y,
+ ptrans->box.width, ptrans->box.height,
res->levels[ptrans->level].stride,
ptrans->stride,
- util_format_get_blocksize(pres->format));
+ pres->format);
}
free(trans->staging);
}