具有相同位大小的渲染目标为何很重要?


10

我目前正在考虑需要哪种类型的GBuffer进行延迟着色,因此我也尝试在线上记录最常见的GBuffer及其格式。

我见过的大多数GBuffer都为每个渲染目标使用了相同的位大小,通常还导致未使用的通道。但是,作为我的GBuffer的第一个猜测,在纸上,我需要两个24位目标和两个32个目标,或者三个24和一个32。

我知道每个附件都具有相同的“大小”可以更好地对齐,但是实际上来讲,浪费信道(或保留它们以供将来使用)并拥有所有大小相同的RT更好还是还是应该使用所需的大小?在前一种情况下,为什么有这样的优势,是否仍将24位填充到32位呢?

Answers:


9

我知道每个附件都具有相同的“大小”可以更好地对齐,但是实际上来讲,浪费信道(或保留它们以供将来使用)并拥有所有大小相同的RT更好还是还是应该使用所需的大小?

具有统一的32位对齐的渲染目标更好,即使这意味着“浪费”一些内存也是如此。这将比拥有非32位对齐的内存快得多。另外,您将不会遇到支持多种类型的缓冲区的麻烦,因为不必在多种类型之间进行转换,因此复制和合并缓冲区将更加容易。

32位是GPU和CPU的固有功能,因此您将减少读取内存所需的周期数。GPU自然会尝试读取32位,如果您尝试读取未对齐的内存地址(例如24位对齐),则GPU将读取32位,然后移出不需要的字节。

这是一篇详细的文章,说明为什么内存对齐很重要(尽管高级概念仍然适用于CPU,而不是GPU。)

是否将24位填充到32位?

某些GPU会填充它,但不能保证,因此它位于驱动程序/ GPU实施区域中。因此,您必须分析并检查结果。

PS:32位或64位,具体取决于体系结构。


5
如果它们都是相同的位大小,则可以将它们烧掉而不需要转换
棘轮怪胎2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.