numthreads

定义在调度计算着色器时要在单个线程组中执行的线程数 (请参阅 ID3D11DeviceContext::D ispatch) 。

numthreads(X, Y, Z)    

X、Y 和 Z 值指示特定方向的线程组的大小,X*Y*Z 的总和表示组中的线程数。 跨三个维度指定线程组大小的功能允许以逻辑 2D 和 3D 数据结构的方式访问各个线程。

例如,如果计算着色器执行 4x4 矩阵加法,则可以将 numthreads 设置为 numthreads (4,4,1) 并且单个线程中的索引将自动匹配矩阵条目。 计算着色器还可以使用 numthreads (16,1,1) 声明具有相同线程数 (16) 线程组,但随后必须基于当前线程数计算当前矩阵条目。

numthreads 的允许参数值取决于计算着色器版本。

计算着色器 最大 Z 最大线程数 (X*Y*Z)
cs_4_x 1 768
cs_5_0 64 1024

 

下图显示了传递给 ID3D11DeviceContext::D ispatch 的参数之间的关系, 调度 (5,3,2) ,在 numthreads 属性中指定的值,numthreads (10,8,3) ,以及将传递给计算着色器的值的线程相关系统值 (SV_GroupIndexSV_DispatchThreadIDSV_GroupThreadIDSV_GroupID) 。

调度、线程组和线程之间的关系图示

以下类型的着色器支持此属性:

顶点 外壳 Geometry 像素 计算
x

 

着色器模型 5 特性

着色器模型 5