CRTC 索引
CRTC 既有物件 ID 也有索引,但它們不是同一件事。索引用於需要 CRTC 的密集打包識別符號的情況,例如 CRTC 的位掩碼。struct drm_mode_get_plane 的成員 possible_crtcs 就是一個例子。
DRM_IOCTL_MODE_GETRESOURCES 用 CRTC ID 陣列填充結構,CRTC 索引是其在此陣列中的位置。
-
DRM_CAP_DUMB_BUFFER
DRM_CAP_DUMB_BUFFER
-
DRM_CAP_VBLANK_HIGH_CRTC
DRM_CAP_VBLANK_HIGH_CRTC
描述
如果設定為 1,則核心支援在 drm_wait_vblank_request.type 的高位中指定 CRTC 索引。
從核心版本 2.6.39 開始,此功能始終設定為 1。
-
DRM_CAP_DUMB_PREFERRED_DEPTH
DRM_CAP_DUMB_PREFERRED_DEPTH
描述
啞緩衝區的首選位深度。
位深度是用於指示單個畫素顏色的位數,不包括任何填充。這與每個畫素的位數不同。例如,XRGB8888 的位深度為 24,但每個畫素有 32 位。
請注意,此首選項僅適用於啞緩衝區,與其他型別的緩衝區無關。
-
DRM_CAP_DUMB_PREFER_SHADOW
DRM_CAP_DUMB_PREFER_SHADOW
描述
如果設定為 1,則驅動程式首選使用者空間渲染到陰影緩衝區,而不是直接渲染到啞緩衝區。為了獲得最佳速度,使用者空間應執行流式有序記憶體副本到啞緩衝區中,並且永遠不要從中讀取。
請注意,此首選項僅適用於啞緩衝區,與其他型別的緩衝區無關。
-
DRM_CAP_PRIME
DRM_CAP_PRIME
-
DRM_PRIME_CAP_IMPORT
DRM_PRIME_CAP_IMPORT
-
DRM_PRIME_CAP_EXPORT
DRM_PRIME_CAP_EXPORT
-
DRM_CAP_TIMESTAMP_MONOTONIC
DRM_CAP_TIMESTAMP_MONOTONIC
描述
如果設定為 0,則核心將在 struct drm_event_vblank 中使用 CLOCK_REALTIME 報告時間戳。如果設定為 1,則核心將使用 CLOCK_MONOTONIC 報告時間戳。有關這些時鐘的定義,請參閱 clock_gettime(2)。
從核心版本 2.6.39 開始,此功能的預設值為 1。從核心版本 4.15 開始,此功能始終設定為 1。
-
DRM_CAP_ASYNC_PAGE_FLIP
DRM_CAP_ASYNC_PAGE_FLIP
-
DRM_CAP_CURSOR_WIDTH
DRM_CAP_CURSOR_WIDTH
描述
CURSOR_WIDTH 和 CURSOR_HEIGHT 功能返回硬體游標的有效寬度 x 高度組合。目的是硬體無關的使用者空間可以查詢要使用的游標平面大小。
請注意,跨驅動程式的約定僅僅是返回一個有效的大小;驅動程式可以自由地新增其他含義,例如,i915 返回最大平面大小。
-
DRM_CAP_CURSOR_HEIGHT
DRM_CAP_CURSOR_HEIGHT
-
DRM_CAP_ADDFB2_MODIFIERS
DRM_CAP_ADDFB2_MODIFIERS
描述
如果設定為 1,驅動程式支援在 DRM_IOCTL_MODE_ADDFB2 ioctl 中提供修飾符。
-
DRM_CAP_PAGE_FLIP_TARGET
DRM_CAP_PAGE_FLIP_TARGET
描述
如果設定為 1,驅動程式支援 drm_mode_crtc_page_flip_target.flags 中 DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE 和 DRM_MODE_PAGE_FLIP_TARGET_RELATIVE 標誌,用於 DRM_IOCTL_MODE_PAGE_FLIP ioctl。
-
DRM_CAP_CRTC_IN_VBLANK_EVENT
DRM_CAP_CRTC_IN_VBLANK_EVENT
-
DRM_CAP_SYNCOBJ
DRM_CAP_SYNCOBJ
-
DRM_CAP_SYNCOBJ_TIMELINE
DRM_CAP_SYNCOBJ_TIMELINE
描述
如果設定為 1,驅動程式支援同步物件上的時間線操作。參見 DRM 同步物件。
-
DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP
DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP
-
DRM_CLIENT_CAP_STEREO_3D
DRM_CLIENT_CAP_STEREO_3D
描述
如果設定為 1,DRM 核心將透過在 struct drm_mode_modeinfo 的標誌中公佈支援的 3D 佈局來公開監視器的立體 3D 功能。參見 DRM_MODE_FLAG_3D_*。
從核心版本 3.13 開始,所有驅動程式都始終支援此功能。
-
DRM_CLIENT_CAP_UNIVERSAL_PLANES
DRM_CLIENT_CAP_UNIVERSAL_PLANES
描述
如果設定為 1,DRM 核心會將所有平面(覆蓋、主平面和游標)公開給使用者空間。
此功能已在核心版本 3.15 中引入。從核心版本 3.17 開始,所有驅動程式都始終支援此功能。
-
DRM_CLIENT_CAP_ATOMIC
DRM_CLIENT_CAP_ATOMIC
-
DRM_CLIENT_CAP_ASPECT_RATIO
DRM_CLIENT_CAP_ASPECT_RATIO
描述
如果設定為 1,DRM 核心將在模式中提供縱橫比資訊。參見 DRM_MODE_FLAG_PIC_AR_*。
從核心版本 4.18 開始,所有驅動程式都始終支援此功能。
-
DRM_CLIENT_CAP_WRITEBACK_CONNECTORS
DRM_CLIENT_CAP_WRITEBACK_CONNECTORS
描述
如果設定為 1,DRM 核心將公開特殊聯結器,用於將提交中設定的場景寫回記憶體。客戶端必須首先啟用 DRM_CLIENT_CAP_ATOMIC。
從核心版本 4.19 開始,原子功能的驅動程式始終支援此功能。
-
DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT
DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT
描述
para 虛擬化硬體(例如 vmwgfx、qxl、virtio 和 virtualbox)的驅動程式對游標平面有額外的限制(因此使得這些驅動程式上的游標平面不是真正通用的),例如,它們需要游標平面的行為像滑鼠游標一樣,並且具有正確設定的熱點屬性。如果未設定此客戶端上限,DRM 核心將隱藏這些虛擬化驅動程式上的游標平面,因為未設定它意味著客戶端無法處理這些額外的限制。設定游標熱點並將游標平面視為滑鼠游標的客戶端應設定此屬性。客戶端必須首先啟用 DRM_CLIENT_CAP_ATOMIC。
在未特殊處理游標平面的驅動程式(即非虛擬化驅動程式)上設定此屬性將返回 EOPNOTSUPP,使用者空間可以使用它來衡量其執行的硬體/驅動程式的要求。
從核心版本 6.6 開始,原子功能的虛擬化驅動程式始終支援此功能。
-
struct drm_syncobj_eventfd
定義:
struct drm_syncobj_eventfd {
__u32 handle;
__u32 flags;
__u64 point;
__s32 fd;
__u32 pad;
};
成員
handlesyncobj 控制代碼。
flags零表示等待點被髮出訊號,或者 DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE 表示等待可用於該點的柵欄。
pointsyncobj 時間線點(對於二進位制 syncobjs 設定為零)。
fd現有 eventfd 以將事件傳送到。
pad必須為零。
描述
註冊一個 eventfd,使其被 syncobj 發出訊號。eventfd 計數器將遞增 1。
-
DRM_IOCTL_GEM_CLOSE
DRM_IOCTL_GEM_CLOSE
描述
核心不會對 GEM 控制代碼進行引用計數。使用者空間負責管理其生命週期。例如,如果使用者空間在同一個 DRM 檔案描述符上兩次匯入同一個記憶體物件,則兩次匯入都返回同一個 GEM 控制代碼,使用者空間需要確保只執行一次 DRM_IOCTL_GEM_CLOSE。當分配一個記憶體物件,然後匯出並在同一個 DRM 檔案描述符上再次匯入時,也會發生相同的情況。DRM_IOCTL_MODE_GETFB2 IOCTL 是一個例外,即使在執行 IOCTL 之前已經存在另一個 GEM 控制代碼引用同一個記憶體物件,它也總是返回新的 GEM 控制代碼。
-
DRM_IOCTL_PRIME_HANDLE_TO_FD
DRM_IOCTL_PRIME_HANDLE_TO_FD
將 GEM 控制代碼轉換為 DMA-BUF FD。
描述
使用者空間使用要匯出的 GEM 控制代碼設定 drm_prime_handle.handle 和 drm_prime_handle.flags,並在 drm_prime_handle.fd 中獲取 DMA-BUF 檔案描述符。
匯出可能由於任何驅動程式特定的原因而失敗,例如,不支援為此特定 GEM 控制代碼匯出(但可能支援其他 GEM 控制代碼)。
對 DMA-BUF 匯出的支援透過 DRM_PRIME_CAP_EXPORT 公佈。
-
DRM_IOCTL_PRIME_FD_TO_HANDLE
DRM_IOCTL_PRIME_FD_TO_HANDLE
將 DMA-BUF FD 轉換為 GEM 控制代碼。
描述
使用者空間使用要匯入的 DMA-BUF 檔案描述符設定 drm_prime_handle.fd,並在 drm_prime_handle.handle 中獲取 GEM 控制代碼。drm_prime_handle.flags 未使用。
如果現有的 GEM 控制代碼引用 DMA-BUF 後面的記憶體物件,則返回該 GEM 控制代碼。因此,需要處理任意 DMA-BUF 的使用者空間必須具有使用者空間查詢資料結構來手動引用計數重複的 GEM 控制代碼。有關更多資訊,請參見 DRM_IOCTL_GEM_CLOSE。
匯入可能由於任何驅動程式特定的原因而失敗,例如,僅支援為在此 DRM 裝置上分配的 DMA-BUF 匯入。
對 DMA-BUF 匯入的支援透過 DRM_PRIME_CAP_IMPORT 公佈。
-
DRM_IOCTL_MODE_RMFB
DRM_IOCTL_MODE_RMFB
描述
這將刪除先前透過 ADDFB/ADDFB2 新增的幀緩衝。IOCTL 引數是幀緩衝物件 ID。
警告:刪除當前在已啟用平面上使用的幀緩衝將停用該平面。連結到該平面的 CRTC 也可能被停用(取決於驅動程式功能)。
-
DRM_IOCTL_MODE_CREATE_DUMB
DRM_IOCTL_MODE_CREATE_DUMB
-
DRM_IOCTL_MODE_GETFB2
DRM_IOCTL_MODE_GETFB2
-
DRM_IOCTL_MODE_CLOSEFB
DRM_IOCTL_MODE_CLOSEFB
描述
這將關閉先前透過 ADDFB/ADDFB2 新增的幀緩衝。IOCTL 引數是幀緩衝物件 ID。
此 IOCTL 類似於 DRM_IOCTL_MODE_RMFB,只是它不會停用平面和 CRTC。只要平面使用幀緩衝,它就會保持活動狀態。當平面不再使用幀緩衝時(因為幀緩衝被另一個幀緩衝替換,或者平面被停用),幀緩衝將被清理。
這對於實現兩個程序之間的無閃爍轉換很有用。
根據威脅模型,使用者空間可能希望確保幀緩衝不暴露任何敏感的使用者資訊:附加到平面的已關閉幀緩衝可以被下一個 DRM 主裝置讀回。
-
DRM_IOCTL_SET_CLIENT_NAME
DRM_IOCTL_SET_CLIENT_NAME
描述
擁有名稱可以更容易地進行跟蹤和除錯。名稱的長度(不包括空終止符)必須 <= DRM_CLIENT_NAME_MAX_LEN。如果名稱包含空格或不可列印字元,呼叫將失敗。
-
struct drm_event
DRM 事件的標頭
定義:
struct drm_event {
__u32 type;
__u32 length;
};
成員
type事件型別。
length有效負載位元組總數(包括標頭)。
描述
此結構是在 DRM FD 上寫回給使用者空間的事件的標頭。在 DRM FD 上的讀取將始終僅返回完整事件:例如,如果讀取緩衝區的大小為 100 位元組,並且有兩個 64 位元組的事件掛起,則只會返回一個事件。
事件型別 0 - 0x7fffffff 是通用 DRM 事件,0x80000000 及以上是晶片組特定的。通用 DRM 事件包括 DRM_EVENT_VBLANK、DRM_EVENT_FLIP_COMPLETE 和 DRM_EVENT_CRTC_SEQUENCE。
-
DRM_EVENT_VBLANK
DRM_EVENT_VBLANK
描述
此事件是在設定了 _DRM_VBLANK_EVENT 標誌的情況下,響應 DRM_IOCTL_WAIT_VBLANK 傳送的。
事件有效負載是一個 struct drm_event_vblank。
-
DRM_EVENT_FLIP_COMPLETE
DRM_EVENT_FLIP_COMPLETE
-
DRM_EVENT_CRTC_SEQUENCE
DRM_EVENT_CRTC_SEQUENCE
描述
此事件是在響應 DRM_IOCTL_CRTC_QUEUE_SEQUENCE 傳送的。
事件有效負載是一個 struct drm_event_crtc_sequence。
-
struct drm_mode_modeinfo
顯示模式資訊。
定義:
struct drm_mode_modeinfo {
__u32 clock;
__u16 hdisplay;
__u16 hsync_start;
__u16 hsync_end;
__u16 htotal;
__u16 hskew;
__u16 vdisplay;
__u16 vsync_start;
__u16 vsync_end;
__u16 vtotal;
__u16 vscan;
__u32 vrefresh;
__u32 flags;
__u32 type;
char name[DRM_DISPLAY_MODE_LEN];
};
成員
clock畫素時鐘(以 kHz 為單位)
hdisplay水平顯示大小
hsync_start水平同步開始
hsync_end水平同步結束
htotal水平總大小
hskew水平傾斜
vdisplay垂直顯示大小
vsync_start垂直同步開始
vsync_end垂直同步結束
vtotal垂直總大小
vscan垂直掃描
vrefresh近似垂直重新整理率(以 Hz 為單位)
flagsmisc. 標誌的位掩碼,參見 DRM_MODE_FLAG_* 定義
type型別標誌的位掩碼,參見 DRM_MODE_TYPE_* 定義
name描述模式解析度的字串
描述
這是使用者空間 API 顯示模式資訊結構。對於核心版本,請參見 struct drm_display_mode。
-
struct drm_mode_get_plane
獲取平面元資料。
定義:
struct drm_mode_get_plane {
__u32 plane_id;
__u32 crtc_id;
__u32 fb_id;
__u32 possible_crtcs;
__u32 gamma_size;
__u32 count_format_types;
__u64 format_type_ptr;
};
成員
plane_id應檢索其資訊的平面的物件 ID。由呼叫者設定。
crtc_id當前 CRTC 的物件 ID。
fb_id當前 fb 的物件 ID。
possible_crtcs與該平面相容的 CRTC 的位掩碼。CRTC 是建立的,它們接收一個索引,該索引對應於它們在位掩碼中的位置。位 N 對應於 CRTC 索引 N。
gamma_size從未使用過。
count_format_types格式數。
format_type_ptr指向平面支援的格式的 __u32 陣列的指標。這些格式不需要修飾符。
描述
使用者空間可以執行 GETPLANE ioctl 來檢索有關平面的資訊。
要檢索支援的格式數,請將 count_format_types 設定為零並呼叫 ioctl。count_format_types 將使用該值進行更新。
要檢索這些格式,請分配一個數組,其中包含儲存 count_format_types 格式所需的記憶體。將 format_type_ptr 指向此陣列,然後再次呼叫 ioctl(其中 count_format_types 仍設定為在第一次 ioctl 呼叫中返回的值)。
-
struct drm_mode_get_connector
獲取聯結器元資料。
定義:
struct drm_mode_get_connector {
__u64 encoders_ptr;
__u64 modes_ptr;
__u64 props_ptr;
__u64 prop_values_ptr;
__u32 count_modes;
__u32 count_props;
__u32 count_encoders;
__u32 encoder_id;
__u32 connector_id;
__u32 connector_type;
__u32 connector_type_id;
__u32 connection;
__u32 mm_width;
__u32 mm_height;
__u32 subpixel;
__u32 pad;
};
成員
encoders_ptr指向 __u32 物件 ID 陣列的指標。
modes_ptr指向 struct drm_mode_modeinfo 陣列的指標。
props_ptr指向 __u32 屬性 ID 陣列的指標。
prop_values_ptr指向 __u64 屬性值陣列的指標。
count_modes模式數。
count_props屬性數。
count_encoders編碼器數。
encoder_id當前編碼器的物件 ID。
connector_id聯結器的物件 ID。
connector_type聯結器的型別。
參見 DRM_MODE_CONNECTOR_* 定義。
connector_type_id型別特定的聯結器編號。
這不是物件 ID。這是一個每個型別的聯結器編號。每個(型別,type_id)組合在 DRM 裝置的所有聯結器中都是唯一的。
(型別,type_id)組合不是一個穩定的識別符號:type_id 可能會根據驅動程式探測順序而更改。
connection聯結器的狀態。
參見 enum drm_connector_status。
mm_width連線的接收器的寬度(以毫米為單位)。
mm_height連線的接收器的高度(以毫米為單位)。
subpixel連線的接收器的子畫素順序。
參見 enum subpixel_order。
pad填充,必須為零。
描述
使用者空間可以執行 GETCONNECTOR ioctl 來檢索有關聯結器的資訊。使用者空間應透過至少執行兩次此 ioctl 來檢索編碼器、模式和屬性:第一次檢索元素數量,第二次檢索元素本身。
要檢索元素數量,請將 count_props 和 count_encoders 設定為零,將 count_modes 設定為 1,並將 modes_ptr 設定為臨時的 struct drm_mode_modeinfo 元素。
要檢索元素,請為 encoders_ptr、modes_ptr、props_ptr 和 prop_values_ptr 分配陣列,然後將 count_modes、count_props 和 count_encoders 設定為其容量。
僅執行兩次 ioctl 可能會出現競爭情況:元素數量可能已在兩個 ioctl 之間因熱插拔事件而更改。使用者空間應重試上次 ioctl,直到元素數量穩定為止。核心不會填充任何不具有預期長度的陣列。
強制探測聯結器
如果 count_modes 欄位設定為零,並且 DRM 客戶端是當前的 DRM 主裝置,則核心將對聯結器執行強制探測以重新整理聯結器狀態、模式和 EDID。強制探測可能很慢,可能會導致閃爍,並且 ioctl 將阻塞。
使用者空間需要強制探測聯結器,以確保它們的元資料在啟動時和接收到熱插拔事件後是最新的。使用者空間可能會在使用者明確請求時執行強制探測。在其他情況下,使用者空間不應執行強制探測。
-
struct drm_mode_property_enum
列舉/位域條目的描述。
定義:
struct drm_mode_property_enum {
__u64 value;
char name[DRM_PROP_NAME_LEN];
};
成員
value此列舉條目的數值。
namename
描述
有關詳細資訊,請參見 struct drm_property_enum。
-
struct drm_mode_get_property
獲取屬性元資料。
定義:
struct drm_mode_get_property {
__u64 values_ptr;
__u64 enum_blob_ptr;
__u32 prop_id;
__u32 flags;
char name[DRM_PROP_NAME_LEN];
__u32 count_values;
__u32 count_enum_blobs;
};
成員
values_ptr指向 __u64 陣列的指標。
enum_blob_ptr指向 struct drm_mode_property_enum 陣列的指標。
prop_id應檢索的屬性的物件 ID。由呼叫者設定。
flagsDRM_MODE_PROP_* 位域。有關標誌的定義,請參見 drm_property.flags。
name符號屬性名稱。使用者空間應使用此欄位來識別屬性。
count_valuesvalues_ptr 中的元素數。
count_enum_blobsenum_blob_ptr 中的元素數。
描述
使用者空間可以執行 GETPROPERTY ioctl 來檢索有關屬性的資訊。同一個屬性可以附加到多個物件,請參見“模式設定基本物件抽象”。
values_ptr 欄位的含義根據屬性型別而變化。有關更多詳細資訊,請參見 drm_property.flags。
僅當屬性的型別為 DRM_MODE_PROP_ENUM 或 DRM_MODE_PROP_BITMASK 時,enum_blob_ptr 和 count_enum_blobs 欄位才有意義。為了向後相容,當屬性的型別為 DRM_MODE_PROP_BLOB 時,核心將始終將 count_enum_blobs 設定為零。如果屬性具有不同的型別,則使用者空間必須忽略這兩個欄位。
使用者空間應透過至少執行兩次此 ioctl 來檢索值和列舉:第一次檢索元素數量,第二次檢索元素本身。
要檢索元素數量,請將 count_values 和 count_enum_blobs 設定為零,然後呼叫 ioctl。count_values 將使用元素數量進行更新。如果屬性的型別為 DRM_MODE_PROP_ENUM 或 DRM_MODE_PROP_BITMASK,則 count_enum_blobs 也將更新。
要檢索元素本身,請為 values_ptr 分配一個數組,並將 count_values 設定為其容量。如果屬性的型別為 DRM_MODE_PROP_ENUM 或 DRM_MODE_PROP_BITMASK,則為 enum_blob_ptr 分配一個數組,並將 count_enum_blobs 設定為其容量。再次呼叫 ioctl 將填充陣列。
-
struct drm_mode_fb_cmd2
幀緩衝元資料。
定義:
struct drm_mode_fb_cmd2 {
__u32 fb_id;
__u32 width;
__u32 height;
__u32 pixel_format;
__u32 flags;
__u32 handles[4];
__u32 pitches[4];
__u32 offsets[4];
__u64 modifier[4];
};
成員
fb_id幀緩衝的物件 ID。
width幀緩衝的寬度。
height幀緩衝的高度。
pixel_formatFourCC 格式程式碼,請參見 drm_fourcc.h 中的 DRM_FORMAT_* 常量。
flags幀緩衝標誌(請參見 DRM_MODE_FB_INTERLACED 和 DRM_MODE_FB_MODIFIERS)。
handlesGEM 緩衝區控制代碼,每個平面一個。如果未使用該平面,則設定為 0。同一個控制代碼可以用於多個平面。
pitches步幅(也稱為 stride),以位元組為單位,每個平面一個。
offsets到緩衝區中的偏移量,以位元組為單位,每個平面一個。
modifier格式修飾符,每個平面一個。請參見 drm_fourcc.h 中的 DRM_FORMAT_MOD_* 常量。所有平面必須使用相同的修飾符。除非在 flags 中設定了 DRM_MODE_FB_MODIFIERS,否則將被忽略。
描述
此結構儲存幀緩衝元資料。有兩種使用它的方法
在平面格式的情況下,此結構最多允許 4 個緩衝區物件,每個平面都有偏移量和步幅。步幅和偏移量順序由 drm_fourcc.h 定義的格式 FourCC 指定,例如,NV12 被描述為
YUV 4:2:0 影像,具有一個 8 位 Y 樣本的平面,後跟一個包含 8 位 2x2 子取樣的色差樣本的交錯 U/V 平面。
因此,它將由 offsets[0] 處的 Y 平面和 offsets[1] 處的 UV 平面組成。
為了適應平鋪、壓縮等格式,可以指定修飾符。 更多資訊請參見“格式修飾符”部分。 請注意,即使看起來我們每個平面都有一個修飾符,但實際上並非如此。 每個平面的修飾符必須相同。 因此,多平面格式的不同資料佈局的所有組合都必須列舉為單獨的修飾符。
當未使用時,handles、pitches、offsets 和 modifier 中的所有條目必須為零。 警告:對於 offsets 和 modifier,零不能用於判斷條目是否被使用,因為它是一個有效值(零偏移很常見,零修飾符是 DRM_FORMAT_MOD_LINEAR)。
-
struct drm_plane_size_hint
平面大小提示
定義:
struct drm_plane_size_hint {
__u16 width;
__u16 height;
};
成員
width平面畫素寬度
height平面畫素高度
描述
平面 SIZE_HINTS 屬性 blob 包含 struct drm_plane_size_hint 的陣列。
-
struct hdr_metadata_infoframe
HDR 元資料資訊幀資料。
定義:
struct hdr_metadata_infoframe {
__u8 eotf;
__u8 metadata_type;
struct {
__u16 x, y;
} display_primaries[3];
struct {
__u16 x, y;
} white_point;
__u16 max_display_mastering_luminance;
__u16 min_display_mastering_luminance;
__u16 max_cll;
__u16 max_fall;
};
成員
eotf流中使用的光電轉換函式 (EOTF)。
metadata_typeStatic_Metadata_Descriptor_ID。
display_primaries資料的色度座標。 這些值編碼為無符號 16 位值,單位為 0.00002,其中 0x0000 表示零,0xC350 表示 1.0000。 display_primaries.x:色度座標的 X 座標。 display_primaries.y:色度座標的 Y 座標。
white_point色彩空間資料的白點。 這些值編碼為無符號 16 位值,單位為 0.00002,其中 0x0000 表示零,0xC350 表示 1.0000。 white_point.x:色度座標白點的 X 座標。 white_point.y:色度座標白點的 Y 座標。
max_display_mastering_luminanceMax Mastering Display Luminance。 此值編碼為無符號 16 位值,單位為 1 cd/m2,其中 0x0001 表示 1 cd/m2,0xFFFF 表示 65535 cd/m2。
min_display_mastering_luminanceMin Mastering Display Luminance。 此值編碼為無符號 16 位值,單位為 0.0001 cd/m2,其中 0x0001 表示 0.0001 cd/m2,0xFFFF 表示 6.5535 cd/m2。
max_cllMax Content Light Level。 此值編碼為無符號 16 位值,單位為 1 cd/m2,其中 0x0001 表示 1 cd/m2,0xFFFF 表示 65535 cd/m2。
max_fallMax Frame Average Light Level。 此值編碼為無符號 16 位值,單位為 1 cd/m2,其中 0x0001 表示 1 cd/m2,0xFFFF 表示 65535 cd/m2。
描述
根據 CTA 861.G 規範的 HDR 元資料資訊幀。 這預計與規範完全匹配。
使用者空間應按照此結構中描述的格式傳遞元資料資訊。
-
struct hdr_output_metadata
HDR 輸出元資料
定義:
struct hdr_output_metadata {
__u32 metadata_type;
union {
struct hdr_metadata_infoframe hdmi_metadata_type1;
};
};
成員
metadata_typeStatic_Metadata_Descriptor_ID。
{unnamed_union}anonymous
hdmi_metadata_type1HDR 元資料資訊幀。
描述
要從使用者空間傳遞的元資料資訊
-
DRM_MODE_PAGE_FLIP_EVENT
DRM_MODE_PAGE_FLIP_EVENT
-
DRM_MODE_PAGE_FLIP_ASYNC
DRM_MODE_PAGE_FLIP_ASYNC
描述
請求儘快執行頁面翻轉,即沒有因等待 vblank 而造成的延遲。 這可能會導致螢幕上出現撕裂現象。
與 atomic uAPI 一起使用時,如果硬體不支援為此更新執行非同步頁面翻轉,驅動程式將返回錯誤。 使用者空間應處理此問題,例如,透過回退到常規頁面翻轉。
注意,某些硬體可能需要在切換到非同步頁面翻轉之前執行最後一次同步頁面翻轉。 作為例外,即使第一次頁面翻轉不是非同步的,驅動程式也會返回成功。
-
DRM_MODE_PAGE_FLIP_FLAGS
DRM_MODE_PAGE_FLIP_FLAGS
描述
適用於 drm_mode_crtc_page_flip_target.flags 的標誌位掩碼。
-
struct drm_mode_create_dumb
建立用於掃描輸出的 KMS dumb 緩衝區。
定義:
struct drm_mode_create_dumb {
__u32 height;
__u32 width;
__u32 bpp;
__u32 flags;
__u32 handle;
__u32 pitch;
__u64 size;
};
成員
height緩衝區高度,以畫素為單位
width緩衝區寬度,以畫素為單位
bpp每個畫素的位數
flags必須為零
handle緩衝區物件控制代碼
pitch兩個連續行之間的位元組數
size整個緩衝區的大小,以位元組為單位
描述
使用者空間填充 height、width、bpp 和 flags。 如果 IOCTL 成功,則核心填充 handle、pitch 和 size。
-
DRM_MODE_ATOMIC_TEST_ONLY
DRM_MODE_ATOMIC_TEST_ONLY
-
DRM_MODE_ATOMIC_NONBLOCK
DRM_MODE_ATOMIC_NONBLOCK
描述
應用原子提交時不阻塞。DRM_IOCTL_MODE_ATOMIC IOCTL 立即返回,而不是等待硬體應用更改。 請注意,驅動程式仍將檢查是否可以在返回之前應用更新。
-
DRM_MODE_ATOMIC_ALLOW_MODESET
DRM_MODE_ATOMIC_ALLOW_MODESET
描述
允許更新在應用時導致臨時或瞬時可見偽影。 應用更新也可能比頁面翻轉花費更多的時間。 所有視覺偽影將在更新完成時消失,並透過 vblank 事件的時間戳發出訊號(請參見 struct drm_event_vblank)。
當 KMS 更新可能導致可見偽影時,必須設定此標誌。 如果沒有此標誌,此類 KMS 更新將返回 EINVAL 錯誤。 什麼型別的更新可能導致可見偽影取決於驅動程式和硬體。 需要預先知道更新是否可能導致可見偽影的使用者空間可以使用 DRM_MODE_ATOMIC_TEST_ONLY 而不使用 DRM_MODE_ATOMIC_ALLOW_MODESET 來檢視它是否失敗。
就驅動程式所知,如果不設定此標誌,則保證不會出現視覺偽影。 某些接收器可能會顯示驅動程式無法控制的視覺偽影。
-
DRM_MODE_ATOMIC_FLAGS
DRM_MODE_ATOMIC_FLAGS
描述
由 DRM_IOCTL_MODE_ATOMIC IOCTL 在 drm_mode_atomic.flags 中接受的標誌位域。
-
struct drm_mode_create_blob
建立新的 blob 屬性
定義:
struct drm_mode_create_blob {
__u64 data;
__u32 length;
__u32 blob_id;
};
成員
data指向要複製的資料的指標。
length要複製的資料的長度。
blob_id返回:新的屬性 ID。
描述
建立一個新的“blob”資料屬性,從資料指標複製 length 位元組,並返回新的 blob ID。
-
struct drm_mode_destroy_blob
銷燬使用者 blob
定義:
struct drm_mode_destroy_blob {
__u32 blob_id;
};
成員
blob_id要銷燬的 blob_id
描述
銷燬使用者建立的 blob 屬性。
使用者空間可以儘快釋放 blob,因為它們不需要透過其 blob 物件 ID 來引用它們。 例如,如果您在原子提交中使用 MODE_ID blob,並且您不會進行另一個重用相同 ID 的提交,則可以在發出提交後立即銷燬 blob,而無需等待其完成。
-
struct drm_mode_create_lease
建立租約
定義:
struct drm_mode_create_lease {
__u64 object_ids;
__u32 object_count;
__u32 flags;
__u32 lessee_id;
__u32 fd;
};
成員
object_ids指向物件 ID 陣列的指標 (__u32)
object_count物件 ID 的數量
flags新 FD 的標誌 (O_CLOEXEC 等)
lessee_id返回:承租人的唯一識別符號。
fd返回:指向新 drm_master 檔案的檔案描述符
描述
租賃模式資源,建立另一個 drm_master。
如果啟用了 DRM_CLIENT_CAP_UNIVERSAL_PLANES,object_ids 陣列必須至少引用一個 CRTC、一個聯結器和一個平面。 或者,租賃可以完全為空。
-
struct drm_mode_list_lessees
列出租戶
定義:
struct drm_mode_list_lessees {
__u32 count_lessees;
__u32 pad;
__u64 lessees_ptr;
};
成員
count_lessees承租人數量。
在輸入時,提供陣列的長度。 在輸出時,提供總數。 不會寫回超過輸入數字的數字,因此可以使用兩個呼叫來獲取大小,然後獲取資料。
pad填充。
lessees_ptr指向承租人的指標。
指向承租人 ID 的 __u64 陣列的指標
描述
從 drm_master 列出較少的資源。
-
struct drm_mode_get_lease
獲取租賃
定義:
struct drm_mode_get_lease {
__u32 count_objects;
__u32 pad;
__u64 objects_ptr;
};
成員
count_objects租賃物件的數量。
在輸入時,提供陣列的長度。 在輸出時,提供總數。 不會寫回超過輸入數字的數字,因此可以使用兩個呼叫來獲取大小,然後獲取資料。
pad填充。
objects_ptr指向物件的指標。
指向物件 ID 的 __u32 陣列的指標。
描述
獲取租賃物件。
-
struct drm_mode_revoke_lease
撤銷租賃
定義:
struct drm_mode_revoke_lease {
__u32 lessee_id;
};
成員
lessee_id承租人的唯一 ID
-
struct drm_mode_rect
二維矩形。
定義:
struct drm_mode_rect {
__s32 x1;
__s32 y1;
__s32 x2;
__s32 y2;
};
成員
x1水平起始座標(含)。
y1垂直起始座標(含)。
x2水平結束座標(不含)。
y2垂直結束座標(不含)。
描述
drm 子系統使用 struct drm_rect 來管理矩形區域,從而將其匯出到使用者空間。
當前由 drm_mode_atomic blob 屬性 FB_DAMAGE_CLIPS 使用。
-
struct drm_mode_closefb
定義:
struct drm_mode_closefb {
__u32 fb_id;
__u32 pad;
};
成員
fb_id幀緩衝區 ID。
pad必須為零。