return prsc;
}
-static boolean
+static bool
panfrost_resource_get_handle(struct pipe_screen *pscreen,
struct pipe_context *ctx,
struct pipe_resource *pt,
handle->modifier = DRM_FORMAT_MOD_INVALID;
if (handle->type == WINSYS_HANDLE_TYPE_SHARED) {
- return FALSE;
+ return false;
} else if (handle->type == WINSYS_HANDLE_TYPE_KMS) {
if (renderonly_get_handle(scanout, handle))
- return TRUE;
+ return true;
handle->handle = rsrc->bo->gem_handle;
handle->stride = rsrc->slices[0].stride;
int ret = drmIoctl(screen->ro->kms_fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &args);
if (ret == -1)
- return FALSE;
+ return false;
handle->stride = scanout->stride;
handle->handle = args.fd;
- return TRUE;
+ return true;
} else {
int fd = panfrost_drm_export_bo(screen, rsrc->bo);
if (fd < 0)
- return FALSE;
+ return false;
handle->handle = fd;
handle->stride = rsrc->slices[0].stride;
- return TRUE;
+ return true;
}
}
- return FALSE;
+ return false;
}
static void
struct panfrost_gtransfer *trans = pan_transfer(transfer);
struct panfrost_resource *prsrc = (struct panfrost_resource *) transfer->resource;
+ /* Mark whatever we wrote as written */
+ if (transfer->usage & PIPE_TRANSFER_WRITE)
+ prsrc->slices[transfer->level].initialized = true;
+
if (trans->map) {
struct panfrost_bo *bo = prsrc->bo;
if (transfer->usage & PIPE_TRANSFER_WRITE) {
- unsigned level = transfer->level;
- prsrc->slices[level].initialized = true;
-
if (prsrc->layout == PAN_AFBC) {
DBG("Unimplemented: writes to AFBC\n");
} else if (prsrc->layout == PAN_TILED) {
assert(transfer->box.depth == 1);
panfrost_store_tiled_image(
- bo->cpu + prsrc->slices[level].offset,
+ bo->cpu + prsrc->slices[transfer->level].offset,
trans->map,
&transfer->box,
- prsrc->slices[level].stride,
+ prsrc->slices[transfer->level].stride,
transfer->stride,
util_format_get_blocksize(prsrc->base.format));
}
util_range_add(&rsc->valid_buffer_range,
transfer->box.x + box->x,
transfer->box.x + box->x + box->width);
+ } else {
+ unsigned level = transfer->level;
+ rsc->slices[level].initialized = true;
}
}
return prsrc->format;
}
-static boolean
+static bool
panfrost_generate_mipmap(
struct pipe_context *pctx,
struct pipe_resource *prsrc,