【发布时间】:2011-12-15 12:59:20
【问题描述】:
使用着色器模型 5/D3D11/HLSL。
我想将 2D 纹素数组视为向量的 2D 矩阵。
u
v (1,4,3,9) (7, 5.5, 4.9, 2.1)
(每个纹素是一个 4 分量向量)。对于不同的着色器,我需要访问纹理中数据的特定范围。因此,纹理中要访问的范围自然应该被索引为 u,v 分量。
我将如何在 HLSL 中做到这一点?我在想以下几点:
- 按正常方式创建纹理
- 将矢量值加载到纹理中(每个纹素 1 个矢量)
- 关闭所有线性插值进行纹理采样(“最近邻”)
- 在着色器中,使用纹理坐标查找您需要的向量
唯一让我感到不安的是,当我使用浮点 u's 和 v's 索引纹理时是否会引入奇怪的错误。
如果纹理是 1024x1024 纹素,并且我试图索引 (3,2)->(3,7),那将是 u=(3/1024,2/1024)->(3/1024 ,7/1024) 感觉有点不稳定。有没有办法通过 int 组件索引纹理?或者它会很好地工作吗?
不想为此使用 GPGPU 框架(所以请不要 CUDA 建议:)。
【问题讨论】:
-
您期望什么样的内存访问模式?纹素指数从何而来?微软对 GPGPU 的回答可能值得一看 DirectCompute(ComputeShader)
-
我确实看过DirectCompute,很酷
标签: gpu gpgpu direct3d11