通过device.createTexture()创建纹理时的一些参数问题
-
Question 1:
param usage differences betweenGPUTextureUsage.COPY_SRC
andGPUTextureUsage.COPY_DST
?Question 2:
param size why we need the third paramsdepthOrArrayLayers
. how it works in graphic task?Question 3:
param format differences betweenrgbaunorm
andbgraunorm
, why we have to usebgraunorm
when the value of param sampleCount is 4? -
-
用来标明是拷贝的来源还是目标,
copy_dst
就是可以做为 copy 的目标,比如用copyExternalImageToTexture
把 image
拷贝给 texture。相应的,copy_src
就是可以作为 copy 来源,也就是可以被拷贝,比如用copyTexureToTexture
,t1 copy to t2,那t1需要有copy_src
,t2要有copy_dst
-
因为纹理贴图支持多维度的贴图,除了普通的
2d
贴图,webgpu 还支持1d, cube, 3d, 2d-array, 3d-array
等类型,那么就对应的depthOrArrayLayer
标明深度参数或者 Array 的layer数量,比如cube对应的depthOrArrayLayer
就必须是6,其他比如 2d-array 根据贴图数量设置 -
rgba/bgra 只是 rgb 的排列方式不同而已,对应着小端对齐/大端对齐,并没有特殊的不同,我不确定 samplecount 为4,既开启了
MSAA
时,一定要用bgra8unorm
吗?
如果是,可能因为目前webgpu
默认的MSAA
需要硬件/系统驱动支持,所以必须要用 perfered format 才可以。
目前大部分设备的色彩空间格式默认是bgra
排列,起码我手上的 几个 windows, mac 和 ios 都是,所以开启默认的MSAA
时,必须用bgra8unorm
。
至于为什么默认是bgra
,因为bgra
排列更符合cpu/gpu的内存排列方式,读取不需要额外的转换操作,可以直接使用底层驱动API去操作
实践上,一般推荐调用context.getPreferredFormat()
得到系统默认的格式,可以避免一些不必要的问题,理论上性能也更好一些
-