#1 楼
像CPU这样的真实GPU具有缓存层次结构。因此,光栅化器不会直接存储到内存中,而是存储到最终会刷新到内存的缓存中。栅格化通常会具有一定的空间局部性(它将在时间上靠近的附近像素中生成写入),因此,如果这些像素在同一缓存行中,则会减少内存事务的总数。这对于填充的多边形栅格化比对线更有效,但是即使线也具有一定的局部性(尤其是如果一次对附近的多条线进行栅格化)。而不是线性地从左到右和从上到下。您将选择一个图块大小(例如4×4或8×8),并将每个图块中的像素存储在一个连续的内存块中,然后使用图块数组制作整个帧缓冲区。这使您在两个维度上都具有局域性,而不仅仅是一个维度,从而提高了缓存性能。而且,平铺很容易在硬件中完成,因为归结为只是模糊一些X和Y地址位的顺序。
评论
$ \ begingroup $
FPGA的内部存储器很少。我将考虑您的描述。
$ \ endgroup $
– Quantum231
16年11月8日在8:46
评论
由于您不进行行的混合,因此您应该能够只写FB(而不是读写)。我相信那应该可以简化很多事情。fb是什么意思?
framebuffer ......
听起来您说的是您从帧缓冲区读取了一个1字节的值,并且那部分很慢/很麻烦?如果是这样,为什么要从帧缓冲区读取而不是“盲写”?如果这样的话。如果发生了这种情况,则在进行alpha混合时,在真实的GPU中也会发生类似的情况。 Alpha混合需要读取已经存在的像素值才能与新的像素值混合,因此它比非Alpha写入(仅写入而不读取)要慢。