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
|
主要
在 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 中定义
| 名称 | 值 | 说明 |
|---|---|---|
BUFFER |
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 flexible
类型: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 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
DebugUtils_SetPowerState_Response
|
|
2 |
err |
zx/Status
|
Device_Query_Response strict resource
在 fuchsia.gpu.magma/magma.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
simple_result |
uint64
|
|
2 |
buffer_result |
handle<vmo>
|
Device_Query_Result strict resource
在 fuchsia.gpu.magma/magma.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
Device_Query_Response
|
|
2 |
err |
zx/Status
|
灵活对象资源
在 fuchsia.gpu.magma/magma.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
semaphore |
handle<event>
|
|
2 |
buffer |
handle<vmo>
|
|
3 |
vmo_semaphore |
handle<vmo>
|
已移除:HEAD
|
4 |
counter_semaphore |
handle<counter>
|
Added: HEAD
|
PowerElementProvider_GetClockSpeedLevel_Result strict resource
在 fuchsia.gpu.magma/magma.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
PowerElementProvider_GetClockSpeedLevel_Response
|
|
2 |
err |
zx/Status
|
|
3 |
framework_err |
internal
|
PowerElementProvider_GetPowerGoals_Result strict resource
在 fuchsia.gpu.magma/magma.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
PowerElementProvider_GetPowerGoals_Response
|
|
3 |
framework_err |
internal
|
PowerElementProvider_SetClockLimit_Result strict resource
在 fuchsia.gpu.magma/magma.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
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 flexible
类型: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 flexible
类型:uint64
在 fuchsia.gpu.magma/magma.fidl 中定义
| 名称 | 值 | 说明 |
|---|---|---|
读取 |
1 | |
写入 |
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 中定义
| 名称 | 类型 | 传输 |
|---|---|---|
| 设备 |
fuchsia.gpu.magma/DependencyInjection
|
渠道 |
PerformanceCounterService
在 fuchsia.gpu.magma/magma.fidl 中定义
| 名称 | 类型 | 传输 |
|---|---|---|
| access |
fuchsia.gpu.magma/PerformanceCounterAccess
|
渠道 |
PowerService
在 fuchsia.gpu.magma/magma.fidl 中定义
| 名称 | 类型 | 传输 |
|---|---|---|
| 设备 |
fuchsia.gpu.magma/CombinedDevice
|
渠道 |
| power_element_provider |
fuchsia.gpu.magma/PowerElementProvider
|
渠道 |
| debug_utils |
fuchsia.gpu.magma/DebugUtils
|
渠道 |
服务
在 fuchsia.gpu.magma/magma.fidl 中定义
| 名称 | 类型 | 传输 |
|---|---|---|
| 设备 |
fuchsia.gpu.magma/CombinedDevice
|
渠道 |
TestService
在 fuchsia.gpu.magma/magma.fidl 中定义
| 名称 | 类型 | 传输 |
|---|---|---|
| 设备 |
fuchsia.gpu.magma/CombinedDevice
|
渠道 |
| test_device |
fuchsia.gpu.magma/TestDevice2
|
渠道 |
TrustedService
在 fuchsia.gpu.magma/magma.fidl 中定义
| 名称 | 类型 | 传输 |
|---|---|---|
| 设备 |
fuchsia.gpu.magma/CombinedDevice
|
渠道 |