panfrost: Fix T6XX Support
[mesa.git] / src / gallium / drivers / panfrost / pan_resource.c
index 3f8d50cad73c768e339aa2b8954576da7289f529..31c7a062ebf4b9bc70b203588ffde610d1bc092a 100644 (file)
@@ -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,