X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fgallium%2Fdrivers%2Fpanfrost%2Fpan_resource.c;h=31c7a062ebf4b9bc70b203588ffde610d1bc092a;hb=397f9ba69fcaef17de5c8f639957743890fa7805;hp=3f8d50cad73c768e339aa2b8954576da7289f529;hpb=227c395c00b69fc105546d479d751d92e923b4fc;p=mesa.git diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c index 3f8d50cad73..31c7a062ebf 100644 --- a/src/gallium/drivers/panfrost/pan_resource.c +++ b/src/gallium/drivers/panfrost/pan_resource.c @@ -83,7 +83,7 @@ panfrost_resource_from_handle(struct pipe_screen *pscreen, return prsc; } -static boolean +static bool panfrost_resource_get_handle(struct pipe_screen *pscreen, struct pipe_context *ctx, struct pipe_resource *pt, @@ -97,10 +97,10 @@ panfrost_resource_get_handle(struct pipe_screen *pscreen, 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; @@ -114,25 +114,25 @@ panfrost_resource_get_handle(struct pipe_screen *pscreen, 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 @@ -592,23 +592,24 @@ panfrost_transfer_unmap(struct pipe_context *pctx, 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)); } @@ -638,6 +639,9 @@ panfrost_transfer_flush_region(struct pipe_context *pctx, 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; } } @@ -652,7 +656,7 @@ panfrost_resource_get_internal_format(struct pipe_resource *prsrc) { return prsrc->format; } -static boolean +static bool panfrost_generate_mipmap( struct pipe_context *pctx, struct pipe_resource *prsrc,