[PATCH xf86-video-amdgpu] Don't use DRM_IOCTL_GEM_FLINK in create_pixmap_for_fbcon

Michel Dänzer michel at daenzer.net
Thu Jul 19 10:43:20 UTC 2018


From: Michel Dänzer <michel.daenzer at amd.com>

We don't need it.

Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
---
 src/drmmode_display.c | 39 +++++++++++----------------------------
 1 file changed, 11 insertions(+), 28 deletions(-)

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index e947ca979..bf8b1a8b6 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -355,13 +355,11 @@ static PixmapPtr
 create_pixmap_for_fbcon(drmmode_ptr drmmode,
 			ScrnInfoPtr pScrn, int fbcon_id)
 {
+	ScreenPtr pScreen = pScrn->pScreen;
 	AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(pScrn);
 	AMDGPUInfoPtr info = AMDGPUPTR(pScrn);
 	PixmapPtr pixmap = info->fbcon_pixmap;
-	struct amdgpu_buffer *bo;
 	drmModeFBPtr fbcon;
-	struct drm_gem_flink flink;
-	struct amdgpu_bo_import_result import = {0};
 
 	if (pixmap)
 		return pixmap;
@@ -375,36 +373,21 @@ create_pixmap_for_fbcon(drmmode_ptr drmmode,
 	    fbcon->height != pScrn->virtualY)
 		goto out_free_fb;
 
-	flink.handle = fbcon->handle;
-	if (ioctl(pAMDGPUEnt->fd, DRM_IOCTL_GEM_FLINK, &flink) < 0) {
-		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-			   "Couldn't flink fbcon handle\n");
+	pixmap = fbCreatePixmap(pScreen, 0, 0, fbcon->depth, 0);
+	if (!pixmap)
 		goto out_free_fb;
-	}
 
-	bo = calloc(1, sizeof(struct amdgpu_buffer));
-	if (!bo) {
-		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-			   "Couldn't allocate bo for fbcon handle\n");
-		goto out_free_fb;
-	}
-	bo->ref_count = 1;
+	pScreen->ModifyPixmapHeader(pixmap, fbcon->width, fbcon->height, 0, 0,
+				    fbcon->pitch, NULL);
+	pixmap->devPrivate.ptr = NULL;
 
-	if (amdgpu_bo_import(pAMDGPUEnt->pDev,
-			     amdgpu_bo_handle_type_gem_flink_name, flink.name,
-			     &import) != 0) {
-		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-			   "Couldn't import BO for fbcon handle\n");
-		goto out_free_bo;
+	if (!glamor_egl_create_textured_pixmap(pixmap, fbcon->handle,
+					       pixmap->devKind)) {
+		pScreen->DestroyPixmap(pixmap);
+		pixmap = NULL;
 	}
-	bo->bo.amdgpu = import.buf_handle;
-
-	pixmap = drmmode_create_bo_pixmap(pScrn, fbcon->width, fbcon->height,
-					  fbcon->depth, fbcon->bpp,
-					  fbcon->pitch, bo);
+	
 	info->fbcon_pixmap = pixmap;
-out_free_bo:
-	amdgpu_bo_unref(&bo);
 out_free_fb:
 	drmModeFreeFB(fbcon);
 	return pixmap;
-- 
2.18.0



More information about the amd-gfx mailing list