Magma 是 Fuchsia 上 GPU/NPU 的驅動程式庫模型。
Magma 有兩個驅動程式庫元件:載入每個應用程式位址空間的硬體專屬程式庫 (「用戶端驅動程式」,有時稱為「可安裝的用戶端驅動程式庫」或「ICD」),以及與硬體介接的 Magma 系統驅動程式庫。兩個驅動程式庫程式之間的通訊協定定義如下。
部分名稱含有數字後置字元 (例如 BufferRangeOp2);該數字是通訊協定演進的詳細資料,可以忽略。
通訊協定
CombinedDevice
定義於 fuchsia.gpu.magma/magma.fidl
所有正式版 |Device| 通訊協定的組合。這項通訊協定是在 Magma 服務端實作,用戶端不應使用。
Connect2
建立與裝置的連線,由兩個 IPC 管道組成。主要管道用於主要通訊協定 (請見下方)。通知管道用於供應商專屬訊息,僅以反向 (伺服器到用戶端) 傳送,通常是為了回應完成的用戶端指令。
要求
| 名稱 | 類型 |
|---|---|
client_id |
uint64
|
primary_channel |
server_end:Primary
|
notification_channel |
server_end:Notification
|
DumpState
將驅動程式庫和硬體狀態轉儲至記錄。
要求
| 名稱 | 類型 |
|---|---|
dump_type |
uint32
|
GetIcdList
傳回可與這個 Magma 裝置搭配使用的 ICD 清單。清單會依偏好程度遞減排序。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
icd_list |
vector<IcdInfo>:8
|
查詢
成功時,會傳回緩衝區中的結果或簡單值。
要求
| 名稱 | 類型 |
|---|---|
query_id |
QueryId
|
回應
| 名稱 | 類型 |
|---|---|
payload |
Device_Query_Result
|
DebugUtils
定義於 fuchsia.gpu.magma/magma.fidl
GPU 驅動程式庫公開的低階通訊協定,主要用於測試及偵錯驅動程式庫。
SetPowerState
設定 GPU 電源狀態。轉換完成後傳回。
要求
| 名稱 | 類型 |
|---|---|
power_state |
int64
|
回應
| 名稱 | 類型 |
|---|---|
payload |
DebugUtils_SetPowerState_Result
|
DependencyInjection
定義於 fuchsia.gpu.magma/magma.fidl
這項通訊協定是由 ZX_PROTOCOL_GPU_DEPENDENCY_INJECTION 裝置實作。用於將其他服務的依附元件插入 MSD。只有具備權限的程序才能使用。
SetMemoryPressureProvider
為 MSD 提供 fuchsia.memorypressure.Provider 實作。
要求
| 名稱 | 類型 |
|---|---|
provider |
client_end:fuchsia.memorypressure/Provider
|
裝置
定義於 fuchsia.gpu.magma/magma.fidl
Magma 裝置通訊協定可讓用戶端透過查詢 (例如裝置和供應商 ID),以及裝置系統驅動程式支援哪些用戶端驅動程式,瞭解硬體。
如要進一步與裝置互動,用戶端可以建立由管道配對組成的連線:主要管道用於提出要求 (請參閱下方的「主要通訊協定」),次要管道用於接收通知訊息 (請參閱下方的「通知通訊協定」)。
Connect2
建立與裝置的連線,由兩個 IPC 管道組成。主要管道用於主要通訊協定 (請見下方)。通知管道用於供應商專屬訊息,僅以反向 (伺服器到用戶端) 傳送,通常是為了回應完成的用戶端指令。
要求
| 名稱 | 類型 |
|---|---|
client_id |
uint64
|
primary_channel |
server_end:Primary
|
notification_channel |
server_end:Notification
|
查詢
成功時,會傳回緩衝區中的結果或簡單值。
要求
| 名稱 | 類型 |
|---|---|
query_id |
QueryId
|
回應
| 名稱 | 類型 |
|---|---|
payload |
Device_Query_Result
|
DiagnosticDevice
定義於 fuchsia.gpu.magma/magma.fidl
用於公開 Magma 裝置診斷資訊的方法。
DumpState
將驅動程式庫和硬體狀態轉儲至記錄。
要求
| 名稱 | 類型 |
|---|---|
dump_type |
uint32
|
IcdLoaderDevice
定義於 fuchsia.gpu.magma/magma.fidl
由 MSD 實作並公開供 ICD 載入器使用的方法。
GetIcdList
傳回可與這個 Magma 裝置搭配使用的 ICD 清單。清單會依偏好程度遞減排序。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
icd_list |
vector<IcdInfo>:8
|
通知
定義於 fuchsia.gpu.magma/magma.fidl
由於訊息內容因供應商而異,因此這個通訊協定是空白的。
PerformanceCounterAccess
定義於 fuchsia.gpu.magma/magma.fidl
這個通訊協定是由 ZX_PROTOCOL_GPU_PERFORMANCE_COUNTERS 裝置實作。
GetPerformanceCountToken
這個存取權杖不會做為事件使用,而是傳遞至 Primary.EnablePerformanceCounterAccess。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
access_token |
handle<event>
|
PerformanceCounterEvents
定義於 fuchsia.gpu.magma/magma.fidl
OnPerformanceCounterReadCompleted
表示效能計數器緩衝區有資料。這些內容會按照讀取完成的順序輸出。
回應
| 名稱 | 類型 |
|---|---|
payload |
PerformanceCounterEventsOnPerformanceCounterReadCompletedRequest
|
PowerElementProvider
定義於 fuchsia.gpu.magma/magma.fidl
這個通訊協定用於擷取這個驅動程式庫提供的功率等級資訊。
GetClockSpeedLevel
取得功率等級,代表 GPU 時脈設為至少目標頻率。只要時脈頻率保持不變,電源等級可能會允許 GPU 閒置或關閉。
要求
| 名稱 | 類型 |
|---|---|
payload |
PowerElementProviderGetClockSpeedLevelRequest
|
回應
| 名稱 | 類型 |
|---|---|
payload |
PowerElementProvider_GetClockSpeedLevel_Result
|
GetPowerGoals
擷取硬體可嘗試達成的耗電量目標清單。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
payload |
PowerElementProvider_GetPowerGoals_Result
|
SetClockLimit
將時脈限制在特定頻率以下。
要求
| 名稱 | 類型 |
|---|---|
payload |
PowerElementProviderSetClockLimitRequest
|
回應
| 名稱 | 類型 |
|---|---|
payload |
PowerElementProvider_SetClockLimit_Result
|
Primary
定義於 fuchsia.gpu.magma/magma.fidl
如果發生系統驅動程式庫錯誤,或用戶端傳送了用戶端應知道無效的訊息,連線就會關閉,並透過 epitaph 傳送 zx.Status。
AddPerformanceCounterBufferOffsetsToPool
將一組緩衝區偏移量新增至集區。|offsets[n].buffer_id| 是先前使用 ImportBuffer() 匯入的緩衝區 ID。同一個緩衝區可以新增至多個集區。即使呼叫 ReleaseBuffer,集區仍會保留緩衝區的參照。傾印到這個項目時,計數器會從 |offsets[n].buffer_offset| 位元組開始寫入緩衝區,最多寫入 |offsets[n].buffer_offset| + |offsets[n].buffer_size|。|offsets[n].buffer_size| 必須夠大,才能容納所有啟用的計數器。呼叫這個方法前,必須先使用 EnablePerformanceCounterAccess 啟用效能計數器存取權。
要求
| 名稱 | 類型 |
|---|---|
pool_id |
PerformanceCounterPoolId
|
offsets |
vector<BufferRange>:64
|
BufferRangeOp2
對緩衝區範圍執行作業。
要求
| 名稱 | 類型 |
|---|---|
op |
BufferOp
|
range |
BufferRange
|
ClearPerformanceCounters
將所有列出的效能計數器值設為 0。部分硬體可能不支援。呼叫這個方法前,必須先使用 EnablePerformanceCounterAccess 啟用效能計數器存取權。
要求
| 名稱 | 類型 |
|---|---|
counters |
PerformanceCounterSet
|
CreateContext
建立用於執行指令的結構定義 context_id。結構定義可能與硬體狀態相關聯。已淘汰:請改用 CreateContext2。TODO(https://fxbug.dev/413030654):完全淘汰這個 API。
要求
| 名稱 | 類型 |
|---|---|
context_id |
ContextId
|
CreateContext2
建立用於執行指令的結構定義 context_id。結構定義可能與硬體狀態相關聯。
要求
| 名稱 | 類型 |
|---|---|
context_id |
ContextId
|
priority |
Priority
|
CreatePerformanceCounterBufferPool
建立緩衝區集區,可將效能計數器轉儲至其中。呼叫這個方法前,必須先使用 EnablePerformanceCounterAccess 啟用效能計數器存取權。
要求
| 名稱 | 類型 |
|---|---|
pool_id |
PerformanceCounterPoolId
|
event_channel |
server_end:PerformanceCounterEvents
|
DestroyContext
刪除結構定義 context_id。
要求
| 名稱 | 類型 |
|---|---|
context_id |
ContextId
|
DumpPerformanceCounters
觸發將效能計數器傾印至緩衝區集區。如果集區中沒有緩衝區,可能會失敗,但不會顯示任何訊息。|trigger_id| 是用戶端指派的任意 ID,可在 OnPerformanceCounterReadCompleted 中傳回。呼叫這個方法前,必須先使用 EnablePerformanceCounterAccess 啟用效能計數器存取權。
要求
| 名稱 | 類型 |
|---|---|
pool_id |
PerformanceCounterPoolId
|
trigger_id |
PerformanceCounterTriggerId
|
EnableFlowControl
啟用 OnNotifyMessagesConsumed 和 OnNotifyMemoryImported 事件。
要求
<EMPTY>
EnablePerformanceCounterAccess
嘗試啟用效能計數器 FIDL 訊息。如要成功,|access_token| 必須由相符裝置的 PerformanceCounterAccess.GetPerformanceCountToken() 傳回。
要求
| 名稱 | 類型 |
|---|---|
access_token |
handle<event>
|
EnablePerformanceCounters
啟用一組效能計數器。停用不在新集合中的已啟用效能計數器。連線關閉時,效能計數器也會自動停用。呼叫這個方法前,必須先使用 EnablePerformanceCounterAccess 啟用效能計數器存取權。
要求
| 名稱 | 類型 |
|---|---|
counters |
PerformanceCounterSet
|
ExecuteCommand
提交指令緩衝區,以便在硬體上執行,並提供相關聯的 resources。resources 必須參照已匯入的緩衝區。wait_semaphores 和 signal_semaphores 必須參照已匯入的事件。
必須先收到所有 wait_semaphores 的信號,才能開始執行,然後重設。
指令緩衝區完成後,系統會發出 signal_semaphores 信號。
要求
| 名稱 | 類型 |
|---|---|
context_id |
ContextId
|
resources |
vector<BufferRange>
|
command_buffers |
vector<CommandBuffer>
|
wait_semaphores |
vector<ObjectId>
|
signal_semaphores |
vector<ObjectId>
|
flags |
CommandBufferFlags
|
ExecuteInlineCommands
提交一系列指令,在硬體上執行,不使用指令緩衝區。計算傳送的指令數量時,應確保訊息總大小小於 MAX_INLINE_COMMANDS_DATA_SIZE。
要求
| 名稱 | 類型 |
|---|---|
context_id |
ContextId
|
commands |
vector<InlineCommand>
|
清除
會往返系統驅動程式庫程式,確保所有先前的訊息都已觀察到,但不一定完成。
要求
<EMPTY>
回應
<EMPTY>
ImportObject
匯入要在系統驅動程式庫中使用的物件。
要求
| 名稱 | 類型 |
|---|---|
payload |
PrimaryImportObjectRequest
|
IsPerformanceCounterAccessAllowed
如果有任何 EnablePerformanceCounterAccess 訊息成功,則傳回 true。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
enabled |
bool
|
MapBuffer
將頁面範圍對應至連線位址空間中位址 hw_va 的硬體。flags 是 MapFlags 的一組旗標,用於指定硬體如何存取緩衝區。
要求
| 名稱 | 類型 |
|---|---|
payload |
PrimaryMapBufferRequest
|
OnNotifyMemoryImported
表示伺服器匯入了指定數量的緩衝區記憶體位元組。呼叫端應限制傳輸中 ImportBuffer 訊息的記憶體用量: (傳送的位元組 - 伺服器匯入的位元組) <= MaxBytes (請參閱 QueryId::MAXIMUM_INFLIGHT_PARAMS)。 這項軟性限制旨在防止記憶體用量過高,但如果訊息較大,用戶端可能會超過限制。伺服器會盡快匯入記憶體,但只有在消耗的位元組數達到上限的一半時,才會傳送這個事件;因此,如果用戶端的傳輸中位元組數小於 max/2,用戶端應傳送 ImportBuffer 訊息,無論其大小為何。
回應
| 名稱 | 類型 |
|---|---|
bytes |
uint64
|
OnNotifyMessagesConsumed
表示伺服器已取用指定數量的訊息。呼叫端應限制傳輸中的訊息數量: (傳送的訊息 - 伺服器消耗的訊息) <= MaxMessages (請參閱 QueryId::MAXIMUM_INFLIGHT_PARAMS)。伺服器實際上會盡快取用訊息,但只有在取用數量達到上限的一半時,伺服器才會傳送這個事件。
回應
| 名稱 | 類型 |
|---|---|
count |
uint64
|
ReleaseObject
在這個連線中,刪除含有 object_id 的物件。
要求
| 名稱 | 類型 |
|---|---|
object_id |
ObjectId
|
object_type |
ObjectType
|
ReleasePerformanceCounterBufferPool
釋出成效計數器緩衝區集區。呼叫這個方法前,必須先使用 EnablePerformanceCounterAccess 啟用效能計數器存取權。
要求
| 名稱 | 類型 |
|---|---|
pool_id |
PerformanceCounterPoolId
|
RemovePerformanceCounterBufferFromPool
從集區中移除緩衝區的所有偏移量。伺服器處理完這個方法後,就不會再將轉儲資料處理到這個緩衝區。傳輸中的傾印資料可能會遺失。呼叫這個方法前,必須先使用 EnablePerformanceCounterAccess 啟用效能計數器存取權。
要求
| 名稱 | 類型 |
|---|---|
pool_id |
PerformanceCounterPoolId
|
buffer_id |
ObjectId
|
UnmapBuffer
從硬體釋出指定 buffer_id 的位址 hw_va 對應關係。緩衝區在釋出時也會隱含取消對應。
要求
| 名稱 | 類型 |
|---|---|
payload |
PrimaryUnmapBufferRequest
|
TestDevice
定義於 fuchsia.gpu.magma/magma.fidl
用於測試 MSD 的其他裝置方法,ICD 不應使用。已淘汰:請改用 TestDevice2。
Connect2
建立與裝置的連線,由兩個 IPC 管道組成。主要管道用於主要通訊協定 (請見下方)。通知管道用於供應商專屬訊息,僅以反向 (伺服器到用戶端) 傳送,通常是為了回應完成的用戶端指令。
要求
| 名稱 | 類型 |
|---|---|
client_id |
uint64
|
primary_channel |
server_end:Primary
|
notification_channel |
server_end:Notification
|
DumpState
將驅動程式庫和硬體狀態轉儲至記錄。
要求
| 名稱 | 類型 |
|---|---|
dump_type |
uint32
|
GetIcdList
傳回可與這個 Magma 裝置搭配使用的 ICD 清單。清單會依偏好程度遞減排序。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
icd_list |
vector<IcdInfo>:8
|
GetUnitTestStatus
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
查詢
成功時,會傳回緩衝區中的結果或簡單值。
要求
| 名稱 | 類型 |
|---|---|
query_id |
QueryId
|
回應
| 名稱 | 類型 |
|---|---|
payload |
Device_Query_Result
|
TestDevice2
定義於 fuchsia.gpu.magma/magma.fidl
在 MSD 中回報測試執行的其他方法。
GetUnitTestStatus
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
STRUCTS
BufferRange
定義於 fuchsia.gpu.magma/magma.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
buffer_id |
ObjectId
|
無預設值 | |
offset |
uint64
|
無預設值 | |
size |
uint64
|
無預設值 |
CommandBuffer
定義於 fuchsia.gpu.magma/magma.fidl
指令緩衝區可用於在共用緩衝區 (VMO) 中傳遞硬體指令。
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
resource_index |
uint32
|
資源索引,其中包含啟動指令緩衝區的操作說明。 |
無預設值 |
start_offset |
uint64
|
資源內的起始偏移量。 |
無預設值 |
DebugUtils_SetPowerState_Response
定義於 fuchsia.gpu.magma/magma.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
time_in_ns |
uint64
|
完成電源狀態轉換所需的時間,以奈秒為單位。 |
無預設值 |
PowerElementProvider_GetPowerGoals_Response 資源
定義於 fuchsia.gpu.magma/magma.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
goals |
vector<PowerGoal>
|
無預設值 |
列舉
BufferOp 彈性
類型:uint32
定義於 fuchsia.gpu.magma/magma.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
POPULATE_TABLES |
1 |
使用這個範圍內對應的頁面填入硬體頁面表格,並視需要提交頁面。如果配置對應為 GROWABLE,則不需要執行這項操作,因為系統會視需要填入分頁表。 |
DEPOPULATE_TABLES |
2 |
取消填入這個範圍的頁面表格對應。這可防止硬體存取該範圍內的頁面,但頁面會保留其內容。 |
ObjectType flexible
類型:uint32
定義於 fuchsia.gpu.magma/magma.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
緩衝區 |
11 |
由 Zircon VMO 支援的記憶體物件。 |
SEMAPHORE |
12 |
由 Zircon 事件或計數器支援的同步物件。 新增:13
|
PowerGoalType flexible
類型:uint64
定義於 fuchsia.gpu.magma/magma.fidl
這個列舉的每個元素都代表特定電源狀態的高階目標。
| 名稱 | 值 | 說明 |
|---|---|---|
ON_READY_FOR_WORK |
1 |
硬體已開啟,但處於閒置狀態,可立即處理工作。 |
HIGH_PERFORMANCE |
2 |
硬體處於高效能狀態,適合玩遊戲或其他密集活動。 |
SUSTAINED_PERFORMANCE |
3 |
硬體處於可長時間提供一致效能的模式。 |
優先檔案區彈性
類型:uint64
定義於 fuchsia.gpu.magma/magma.fidl
指定優先順序。硬體會嘗試分配資源,優先處理優先順序較高的工作。只有信任的用戶端可以要求高於 MEDIUM 的優先順序。MEDIUM 視為預設優先順序。
| 名稱 | 值 | 說明 |
|---|---|---|
低 |
128 |
|
MEDIUM |
256 |
|
高 |
512 |
|
REALTIME |
1024 |
QueryId 彈性
類型:uint64
定義於 fuchsia.gpu.magma/magma.fidl
可從 Magma 系統驅動程式庫查詢的硬體和驅動程式庫資訊類型。您可以使用供應商專屬 ID 編號,但這些 ID 會列在其他地方。
| 名稱 | 值 | 說明 |
|---|---|---|
VENDOR_ID |
0 |
傳回硬體供應商 ID (簡單結果) - 應盡可能為硬體供應商的 PCI ID,否則應為 Khronos 供應商 ID。 |
DEVICE_ID |
1 |
傳回硬體裝置 ID (簡單結果) |
VENDOR_VERSION |
2 |
傳回系統驅動程式庫支援的供應商介面版本。 新增:12
|
IS_TOTAL_TIME_SUPPORTED |
3 |
如果支援 MAGMA_QUERY_TOTAL_TIME,則傳回 true (簡單結果) |
MAXIMUM_INFLIGHT_PARAMS |
5 |
前 32 位元:傳輸中的訊息數量上限;後 32 位元:傳輸中的記憶體上限 (MB) (簡單結果) |
MAGMA_QUERY_TOTAL_TIME |
500 |
傳回 struct magma_total_time_query_result (緩衝區結果);請參閱:src/graphics/lib/magma/include/magma/magma_common_defs.h |
VENDOR_QUERY_0 |
10000 |
供應商專屬查詢 ID 從這裡開始 |
TABLES
IcdInfo
定義於 fuchsia.gpu.magma/magma.fidl
可與 Magma 裝置搭配使用的 ICD 實作相關資訊。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
component_url |
fuchsia.url/Url
|
提供 ICD 的元件實作網址。 |
2 |
flags |
IcdFlags
|
描述 ICD 基本功能的旗標,包括支援的 API。 |
InlineCommand
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
data |
vector<uint8>
|
|
2 |
semaphores |
vector<ObjectId>
|
PerformanceCounterEventsOnPerformanceCounterReadCompletedRequest
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
trigger_id |
PerformanceCounterTriggerId
|
必填。 |
2 |
buffer_id |
ObjectId
|
必填。 |
3 |
buffer_offset |
uint32
|
必填。 |
4 |
timestamp |
zx/Time
|
必填。 |
5 |
flags |
ResultFlags
|
必填。 |
PowerElementProviderGetClockSpeedLevelRequest
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
hz |
uint64
|
此為必要項目。目標頻率。 |
2 |
allow_max |
bool
|
如果為 true,且 |
PowerElementProviderSetClockLimitRequest
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
hz |
uint64
|
此為必要項目。目標頻率 |
資源:PowerElementProvider_GetClockSpeedLevel_Response
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
token |
handle<event>
|
此為必要項目。必須租用的 fuchsia.power.broker.DependencyToken。 |
2 |
level |
uint8
|
此為必要項目。租賃 |
3 |
actual_hz |
uint64
|
此為必要項目。該層級代表的目標頻率。如果 |
PowerElementProvider_SetClockLimit_Response 資源
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
handle |
handle<eventpair>
|
此為必要項目。代表這項要求的控制代碼;只要控制代碼處於開啟狀態,系統就會遵守時鐘限制。 |
2 |
actual_hz |
uint64
|
此為必要項目。時脈實際受限的頻率。這個值可能大於或小於 |
PowerGoal 資源
定義於 fuchsia.gpu.magma/magma.fidl
這個表格代表特定功率目標。用戶端必須取得權杖的租約,才能啟用狀態。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
type |
PowerGoalType
|
必填。 |
2 |
token |
handle<event>
|
此為必要項目。必須在層級 1 租賃 fuchsia.power.broker.DependencyToken,才能達成目標。 |
資源:PrimaryImportObjectRequest
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
object |
Object
|
必填。 |
2 |
object_type |
ObjectType
|
必填。 |
3 |
object_id |
ObjectId
|
必填。 |
4 |
flags |
ImportFlags
|
選用 |
PrimaryMapBufferRequest
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
hw_va |
uint64
|
必填。 |
2 |
range |
BufferRange
|
必填。 |
3 |
flags |
MapFlags
|
PrimaryUnmapBufferRequest
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
hw_va |
uint64
|
必填。 |
2 |
buffer_id |
ObjectId
|
必填。 |
UNIONS
DebugUtils_SetPowerState_Result strict
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
DebugUtils_SetPowerState_Response
|
|
2 |
err |
zx/Status
|
Device_Query_Response strict resource
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
simple_result |
uint64
|
|
2 |
buffer_result |
handle<vmo>
|
Device_Query_Result strict resource
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
Device_Query_Response
|
|
2 |
err |
zx/Status
|
彈性物件資源
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
semaphore |
handle<event>
|
|
2 |
buffer |
handle<vmo>
|
|
3 |
vmo_semaphore |
handle<vmo>
|
已移除:HEAD
|
4 |
counter_semaphore |
handle<counter>
|
新增:HEAD
|
PowerElementProvider_GetClockSpeedLevel_Result strict resource
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
PowerElementProvider_GetClockSpeedLevel_Response
|
|
2 |
err |
zx/Status
|
|
3 |
framework_err |
internal
|
strict resource PowerElementProvider_GetPowerGoals_Result
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
PowerElementProvider_GetPowerGoals_Response
|
|
3 |
framework_err |
internal
|
PowerElementProvider_SetClockLimit_Result strict resource
定義於 fuchsia.gpu.magma/magma.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
PowerElementProvider_SetClockLimit_Response
|
|
2 |
err |
zx/Status
|
|
3 |
framework_err |
internal
|
BITS
CommandBufferFlags flexible
類型:uint64
定義於 fuchsia.gpu.magma/magma.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
VENDOR_FLAG_0 |
65536 | 廠商專屬定義從這裡開始 |
IcdFlags 彈性
類型:uint32
定義於 fuchsia.gpu.magma/magma.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
SUPPORTS_VULKAN |
1 | |
SUPPORTS_OPENCL |
2 | |
SUPPORTS_MEDIA_CODEC_FACTORY |
4 |
ImportFlags flexible
類型:uint64
定義於 fuchsia.gpu.magma/magma.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
SEMAPHORE_ONE_SHOT |
1 |
MapFlags 彈性
類型:uint64
定義於 fuchsia.gpu.magma/magma.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
閱讀 |
1 | |
WRITE |
2 | |
EXECUTE |
4 | |
GROWABLE |
8 | 未提交的頁面可能會在硬體故障時提交。如果未設定這個旗標,存取錯誤應會導致錯誤。 |
VENDOR_FLAG_0 |
65536 | 廠商專屬定義從這裡開始 |
ResultFlags flexible
類型:uint32
定義於 fuchsia.gpu.magma/magma.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
DISCONTINUITY |
1 | 如果效能計數器遺漏部分樣本 (例如硬體有部分時間處於保護模式),系統會在 result_flags 中設定這個位元。 |
常數
| 名稱 | 值 | 類型 | 說明 |
|---|---|---|---|
| MAX_ICD_COUNT |
8
|
uint64 |
Magma 系統驅動程式庫程式支援的 ICD 數量上限。 |
| MAX_INLINE_COMMANDS_DATA_SIZE |
2048
|
uint32 |
在單一訊息中傳送多個內嵌指令時使用的批次大小。 新增:15
|
別名
| 名稱 | 值 | 說明 |
|---|---|---|
| ContextId |
uint32 |
|
| ObjectId |
uint64 |
|
| PerformanceCounterPoolId |
uint64 |
效能計數器集區包含緩衝區的位元組範圍。每當觸發效能計數器轉儲時,驅動程式庫就會從集區中移除一個範圍,將硬體的效能計數器值寫入其中,然後使用 OnPerformanceCounterReadCompleted 向用戶端發出信號。集區 ID 是由用戶端分配的任意 uint64 值。 |
| PerformanceCounterSet |
vector[64] |
描述一組效能計數器。確切含義取決於特定驅動程式庫,但通常是代表每個效能計數器啟用或停用的位元向量。 |
| PerformanceCounterTriggerId |
uint32 |
服務
DependencyInjectionService
定義於 fuchsia.gpu.magma/magma.fidl
| 名稱 | 類型 | 傳輸 |
|---|---|---|
| device |
fuchsia.gpu.magma/DependencyInjection
|
版本 |
PerformanceCounterService
定義於 fuchsia.gpu.magma/magma.fidl
| 名稱 | 類型 | 傳輸 |
|---|---|---|
| 存取權 |
fuchsia.gpu.magma/PerformanceCounterAccess
|
版本 |
PowerService
定義於 fuchsia.gpu.magma/magma.fidl
| 名稱 | 類型 | 傳輸 |
|---|---|---|
| device |
fuchsia.gpu.magma/CombinedDevice
|
版本 |
| power_element_provider |
fuchsia.gpu.magma/PowerElementProvider
|
版本 |
| debug_utils |
fuchsia.gpu.magma/DebugUtils
|
版本 |
服務
定義於 fuchsia.gpu.magma/magma.fidl
| 名稱 | 類型 | 傳輸 |
|---|---|---|
| device |
fuchsia.gpu.magma/CombinedDevice
|
版本 |
TestService
定義於 fuchsia.gpu.magma/magma.fidl
| 名稱 | 類型 | 傳輸 |
|---|---|---|
| device |
fuchsia.gpu.magma/CombinedDevice
|
版本 |
| test_device |
fuchsia.gpu.magma/TestDevice2
|
版本 |
TrustedService
定義於 fuchsia.gpu.magma/magma.fidl
| 名稱 | 類型 | 傳輸 |
|---|---|---|
| device |
fuchsia.gpu.magma/CombinedDevice
|
版本 |