1*4882a593SmuzhiyunFrom 78032ab9467c3217375d917beff219468893649a Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Thu, 12 May 2022 11:26:31 +0800 4*4882a593SmuzhiyunSubject: [PATCH] NativeStateDRM: Honor visual configuration 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunCreate GBM surface that matches visual configuration. 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 9*4882a593Smuzhiyun--- 10*4882a593Smuzhiyun src/native-state-drm.cpp | 22 ++++++++++++---------- 11*4882a593Smuzhiyun 1 file changed, 12 insertions(+), 10 deletions(-) 12*4882a593Smuzhiyun 13*4882a593Smuzhiyundiff --git a/src/native-state-drm.cpp b/src/native-state-drm.cpp 14*4882a593Smuzhiyunindex 2979917..dad4154 100644 15*4882a593Smuzhiyun--- a/src/native-state-drm.cpp 16*4882a593Smuzhiyun+++ b/src/native-state-drm.cpp 17*4882a593Smuzhiyun@@ -50,13 +50,22 @@ NativeStateDRM::display() 18*4882a593Smuzhiyun } 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun bool 21*4882a593Smuzhiyun-NativeStateDRM::create_window(WindowProperties const& /*properties*/) 22*4882a593Smuzhiyun+NativeStateDRM::create_window(WindowProperties const& properties) 23*4882a593Smuzhiyun { 24*4882a593Smuzhiyun if (!dev_) { 25*4882a593Smuzhiyun Log::error("Error: DRM device has not been initialized!\n"); 26*4882a593Smuzhiyun return false; 27*4882a593Smuzhiyun } 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun+ /* egl config's native visual id is drm fourcc */ 30*4882a593Smuzhiyun+ surface_ = gbm_surface_create(dev_, mode_->hdisplay, mode_->vdisplay, 31*4882a593Smuzhiyun+ properties.visual_id, 32*4882a593Smuzhiyun+ GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING); 33*4882a593Smuzhiyun+ if (!surface_) { 34*4882a593Smuzhiyun+ Log::error("Failed to create GBM surface\n"); 35*4882a593Smuzhiyun+ return false; 36*4882a593Smuzhiyun+ } 37*4882a593Smuzhiyun+ 38*4882a593Smuzhiyun return true; 39*4882a593Smuzhiyun } 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun@@ -427,8 +436,9 @@ NativeStateDRM::fb_get_from_bo(gbm_bo* bo) 42*4882a593Smuzhiyun unsigned int height = gbm_bo_get_height(bo); 43*4882a593Smuzhiyun unsigned int stride = gbm_bo_get_stride(bo); 44*4882a593Smuzhiyun unsigned int handle = gbm_bo_get_handle(bo).u32; 45*4882a593Smuzhiyun+ unsigned int bpp = gbm_bo_get_bpp(bo); 46*4882a593Smuzhiyun unsigned int fb_id(0); 47*4882a593Smuzhiyun- int status = drmModeAddFB(fd_, width, height, 24, 32, stride, handle, &fb_id); 48*4882a593Smuzhiyun+ int status = drmModeAddFB(fd_, width, height, bpp, bpp, stride, handle, &fb_id); 49*4882a593Smuzhiyun if (status < 0) { 50*4882a593Smuzhiyun Log::error("Failed to create FB: %d\n", status); 51*4882a593Smuzhiyun return 0; 52*4882a593Smuzhiyun@@ -452,14 +462,6 @@ NativeStateDRM::init_gbm() 53*4882a593Smuzhiyun return false; 54*4882a593Smuzhiyun } 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun- surface_ = gbm_surface_create(dev_, mode_->hdisplay, mode_->vdisplay, 57*4882a593Smuzhiyun- GBM_FORMAT_XRGB8888, 58*4882a593Smuzhiyun- GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING); 59*4882a593Smuzhiyun- if (!surface_) { 60*4882a593Smuzhiyun- Log::error("Failed to create GBM surface\n"); 61*4882a593Smuzhiyun- return false; 62*4882a593Smuzhiyun- } 63*4882a593Smuzhiyun- 64*4882a593Smuzhiyun return true; 65*4882a593Smuzhiyun } 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun-- 68*4882a593Smuzhiyun2.20.1 69*4882a593Smuzhiyun 70