运行时依赖项
magma 驱动程序和库应该已内置到完整的 Fuchsia 映像中。系统将根据构建时选择的开发板构建并加载正确的驱动程序。
组件清单
添加以下代码以启用对 Vulkan 驱动程序的访问权限:
CML 语言
对于使用 .cml 清单声明的组件:
{
include: [
"vulkan/client.shard.cml"
],
use: [
{ protocol: "fuchsia.media.ProfileProvider" },
],
...
}
fuchsia.media.ProfileProvider
功能是可选的,但建议提供。
必需的功能路由
使用 Vulkan 的组件必须将以下 FIDL 服务路由到它:
fuchsia.sysmem.Allocator
fuchsia.vulkan.loader.Loader
fuchsia.tracing.provider.Registry
fuchsia.logger.LogSink
fuchsia.media.ProfileProvider
- 可选,但强烈建议使用;仅当在 Vulkan ICD 中使用截止线程存在安全问题时,才应忽略此字段。如果未指定,Vulkan ICD 将为内部线程使用默认线程优先级,这可能会导致性能欠佳。未包含在vulkan/client.shard.cml
中,因此必须手动执行use
操作。
测试组件可以通过在非封闭领域执行来接收这些功能:
# BUILD.gn
fuchsia_test_component("my_test_component") {
component_name = "my_test"
manifest = "meta/my_test.cml"
deps = [ ":my_test_bin" ]
# This runs the test in "vulkan-tests" non-hermetic realm.
test_type = "vulkan"
}
- 对于
vulkan-test
,请将您的 test_type 标记为vulkan
- 对于
system-test
,请将您的 test_type 标记为system
测试组件可以使用 vulkan_envs 环境来确保它们在支持 Vulkan 的所有 buildbot 上运行。
构建时依赖项
树内构建
树内代码应依赖于 //src/lib/vulkan
才能包含 Vulkan 头文件并链接到 libvulkan.so
。
其他实用目标:
//src/lib/vulkan:vulkan_validation_layers
:需要获得相关权限,才能启用 Vulkan 验证层。
SDK 客户端
使用 Bazel SDK 的代码应依赖于 @fuchsia_sdk//pkg/vulkan
。
呈现在屏幕上
您可以通过以下两种方式显示渲染的输出:
系统合成器
如需了解详情,请参阅 Views 文档。
直接发送到显示屏
此方法与具有系统合成器的系统不兼容。
您可以使用自定义版本的 WSI 交换链。
如需详细了解 Fuchsia 自定义,请参阅 vkcube 示例。请注意,我们已移除对选项 1 的交换链支持。
报告问题
请留意系统日志中是否存在各种与图形驱动程序有关的问题,并提交有关 Magma 项目的工单。 驱动程序应终止与发生这些问题时所执行的上下文相对应的连接;否则,应妥善处理此故障。
如果之后仍无法解决问题,请将该问题也提交报告。
GPU 故障
如下所示。这可能是由于用户错误或驱动程序错误所致。请确保您的应用不存在 Vulkan 验证层问题。
如果您认为自己的应用是无辜的,请提交 Magma 工单,并至少包含日志的这一部分,最好提供重现问题的配方:
> [WARNING] GPU fault detected
> ---- device dump begin ----
> RELEASE build
> Device id: 0x1916
> RENDER_COMMAND_STREAMER
> sequence_number 0x1003
> active head pointer: 0x1f328
> ENGINE FAULT DETECTED
> engine 0x0 src 0x3 type 0x0 gpu_address 0x1000000
> mapping cache footprint 11.9 MB cap 190.0 MB
> ---- device dump end ----
> [WARNING] resetting render engine
GPU 挂起
如果命令缓冲区无法在特定时间内完成,GPU 驱动程序应检测该条件并将其视为发生了故障。
同样,可能是应用错误或驱动程序错误。如果您认为自己的应用是无辜的,请提交 Magma 工单,并至少包含日志的这一部分,最好提供重现问题的配方:
> [WARNING] Suspected GPU hang: last submitted sequence number 0x1007 master_interrupt_control 0x80000000
> ---- device dump begin ----
> DEBUG build
> Device id: 0x1916
> RENDER_COMMAND_STREAMER
> sequence_number 0x1006
> active head pointer: 0x20
> No engine faults detected.
> mapping cache footprint 0.0 MB cap 0.0 MB
> ---- device dump end ----
> [WARNING] resetting render engine