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