繁体   English   中英

OpenGL / DirectX是否在内部将其他纹理格式转换为RGBA格式?

[英]Does OpenGL/DirectX converts other texture formats to RGBA format internally?

正如标题所述,我具有RGB565颜色缓冲区的动态纹理(每帧更新一次),我不知道哪种方法会具有更好的性能:

  1. 创建具有RGB565格式的纹理,并在每帧中将RGB565颜色缓冲区上传到GPU。
  2. 创建具有RGBA8888格式的纹理并将RGB565颜色缓冲区转换为RGBA8888,然后再上传到GPU。

我认为,如果OpenGL / DirectX在内部将其他格式转换为RGBA8888,那么在上载到GPU之前,创建RGBA8888纹理并自行转换数据可能会更快。

不知道哪一个表现更好?

进行基准测试。

话虽如此,5-6-5模式之所以奇怪,是因为它只有16位。 GPU通常在硬件中支持所有这些,因此,如果存在某种格式,则可以假定存在用于处理该格式的硬件说明。

这也可能取决于您在GPU上施加的全局工作负载以及GPU的特性:将565纹理放到视频内存中并在着色器中从该纹理中读回将消耗888对应内存的一半带宽,但是( (不确定),这会消耗更多的处理能力。

因此,如果可能,可以在多种配置上进行基准测试:)

我怀疑自己将RGB565数据转换为RGBA8888是否会更快。

首先,RGB565是一种已被广泛使用的格式,并且您的硬件很有可能直接支持它。 如果精度足以满足您的用例,则由于减少了内存带宽并相应地提高了缓存命中率,它将使用RGBA8888的一半内存,并且很有可能至少具有相同的效率。

即使硬件不支持它,我仍然认为自己将其转换为RGBA8888不会更有效。 任何物有所值的驱动程序都将具有高度优化的代码,用于格式转换。 甚至更重要的是,它可能能够在必须进行的数据复制期间应用格式转换,与进行转换的代码相比,它避免了数据的一个副本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM