首页 > 解决方案 > 清除 AMD 硬件上的附件问题

问题描述

我的 Vulkan 应用程序可以在集成的 Intel HD620 和 Nvidia Quadro4000 上完美运行。验证层已启用,一切都很好。

然后我转移到 ArchLinux 服务器,使用启用了海岛支持的 AMDGPU 驱动程序在 R9 390X 上进行测试。Vulkan SDK (1.2.135.0) 示例按预期工作,但我的应用程序只显示垃圾。

我将问题简化为最小设置,使用单个渲染通道、单个子通道、没有深度/模板、单一颜色附件、没有描述符集以及琐碎的顶点和片段着色器。

渲染通道内的代码如下:

VkClearAttachment catt = {
    .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
    .colorAttachment = 0,
    .clearValue = { .color = { .float32 = { 1,0,1,1 } } }
}
VkClearRect rect = {
    .rect = { .offset = { 0,0 }, .extent = { width,height } },
    .baseArrayLayer = 0,
    .layerCount = 1
}
vkCmdClearAttachemnts(commandbuffer,1,&catt,1,&rect);

上面的代码产生了预期的全屏洋红色附件。

现在奇怪的部分:

a) 将 .offset 或 .extent 设置为任何值(渲染通道允许)始终产生相同的输出:

输出第一次运行

b) 仅将清除颜色更改为绿色并再次运行应用程序会产生以下输出:

输出第二次运行

我不知道发生了什么。

验证层是静默的,我检查了 HD620 和 Quadro4000,一切都按预期工作。我切换到 AMD HD7750,所以为了保留 AMDGPU 驱动程序,我得到了与 R9 390X相同的错误/块状结果。

可能是 AMDGPU 驱动程序的问题吗?尽管如此,SDK 示例(全息图)仍按预期工作。

在过去的 3 天里,我一直在检查每一行代码,输出的块状性质指出了一个可能的平铺问题,但是.. 一切都是 TILING_OPTIMAL。

标签: vulkan

解决方案


推荐阅读