首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vulkan屏外渲染:最优或线性贴图

Vulkan屏外渲染:最优或线性贴图
EN

Stack Overflow用户
提问于 2018-07-23 11:42:18
回答 2查看 1.1K关注 0票数 2

我想用Vulkan构建一个屏幕外渲染器,并将呈现内容复制到每个帧中的内存中。

一种方案是使用带有TILING_OPTIMAL的帧映像,并使用另一个复制呈现传递将内容复制到主机可见的暂存缓冲区。

另一种方案是使用带有TILING_LINEAR的帧图像,并直接从图像中复制。

我认为第一个方案是更有效的,虽然涉及多一个复制步骤,但我不确定。还有更好的解决办法吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-23 14:50:10

第一种解决办法可能是更好的办法。

VK_IMAGE_TILING_LINEAR可能是坏的。

VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT内存可能也很糟糕。

第一种解决方案是双缓冲的,这样可以更好地重叠设备本地和主机本地工作.

Vulkan设备存储器的文章似乎推荐HOST_VISIBLE,将HOST_COHERENTHOST_CACHED作为屏幕截图之类的暂存缓冲区。除了作为溢出内存,他们甚至不敢提到GPU写入非DEVICE_LOCAL内存类型。

你的Vulkan记忆类型是什么?提到可以根据图像使用(vkGetImageMemoryRequirements)限制内存类型。VK_IMAGE_TILING_LINEAR保证具有HOST_VISIBLE内存,但是(正如@Ekzuzy所述),这种限制可能表现为VK_IMAGE_TILING_LINEAR VkFormat在使用颜色附件时不受支持(甚至不能执行vkCreateImage)。

UMA设备可能值得测量方法nr。2.这些内存类型通常是DEVICE_LOCAL|HOST_VISIBLE|HOST_CACHED。尽管如此,复制可以是快速的,并且绘制到严重的瓦片图像可能太慢.

票数 3
EN

Stack Overflow用户

发布于 2018-07-23 11:53:01

您可能会发现,只有第一个解决方案是可能的。规范保证只有VK_IMAGE_USAGE_TRANSFER_SRC_BIT和/或 VK_IMAGE_USAGE_TRANSFER_DST_BIT用法支持线性拼接的图像。其他用法也可能得到支持,但这种支持没有得到保证。因此,您要实现的代码可能在一个平台上工作,但可能不能在其他平台上工作,并且,根据您的目标,您可能需要实现这两种解决方案。

因此,首先检查你是否能够直接渲染成一个线性平铺的图像。在此之后,如果可能的话,执行您自己的测试并检查在您的情况下哪个解决方案是最优的。或者--如果你想瞄准更多的平台--只实现第一个通用的解决方案,这个解决方案应该在任何地方都能工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51477954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档