我正面临一项任务,其中我的一个hlsl着色器需要每个像素进行多次纹理查找。我的2d纹理固定为256 * 256,因此在给定此约束的情况下,两个字节应足以处理任何给定的纹素。我的想法是在每个浮点数中放置两个xy坐标,当以Vector4格式图像打包时,在像素空间中给出八个xy坐标。然后使用这八个坐标对另一个纹理进行采样。
这样做的原因是为了节省图形内存并尝试优化处理时间,因为那时我不需要多次纹理查找。
顺便说一句:有没有人知道使用1次采样从4个浮点数编码/解码16个字节是否比使用未编码数据的4次采样慢?
编辑:这适用于着色器模型3
答案 0 :(得分:1)
如果您定位SM 4.0-SM 5.0
,可以使用Binary Casts
和Bitwise operations
:
uint4 myUInt4 = asuint(myFloat4);
uint x0 = myUInt4.x & 0x000000FF; //extract two xy-coordinates (x0,y0), (x1,y1)
uint y0 = (myUInt4.x & 0x0000FF00) >> 8;
uint x1 = (myUInt4.x & 0x00FF0000) >> 16;
uint y1 = (myUInt4.x & 0xFF000000) >> 24;
//repeat operation for .y .z and .w coordinates
对于之前的Shader模型,我认为它可能更复杂,因为它取决于FP精度。