- 本文翻译自MSDN网站
计算着色器是一个可编程着色器阶段,扩展了微软Direct3D 11,超越图形编程。计算着色器技术也称为 DirectCompute 技术。
和其他可编程着色器(例如顶点和几何着色器)一样,计算着色器也是用 HLSL 设计和实现的,但这只是相似之处。 计算着色器提供高速通用计算,并利用图形处理单元(GPU)上的大量并行处理器。 计算着色器提供内存共享和线程同步特性,以允许更有效的并行编程方法。 您可以调用 ID3D11DeviceContext::Dispatch 或 ID3D11DeviceContext::DispatchIndirect 方法以在计算着色器中执行命令。一个计算着色器能够在多个线程上并行运行。
在 Direct3D 10.x硬件上使用计算着色器
微软Direct3D 10上的一个计算着色器也被称为 DirectCompute 4.x.
如果你使用Direct3D 11 API和更新的驱动程序, feature level(特性级别)10和10.1 Direct3D 硬件能够选择性的使用cs_4_0和cs_4_1 profiles(配置文件)支持一个有限制的DirectCompute形式。当您在这个硬件上使用 DirectCompute 时,请记住以下限制:
- 每个组的最大线程数限制为 D3D11_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP (768) 。
- numthreads的X和Y维度被限制为D3D11_CS_4_X_THREAD_GROUP_MAX_X (768) 和 D3D11_CS_4_X_THREAD_GROUP_MAX_Y (768).
- numthreads 的Z维度限制为1。
- dispatch分派的Z维被限制为 D3D11_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION (1).
- 只有一个无序访问视图能够被绑定到着色器 (D3D11_CS_4_X_UAV_REGISTER_COUNT是 1).
- 只有RWStructuredBuffers 和RWByteAddressBuffers 可以作为无序访问视图使用。
- 线程只能访问groupshared(组共享)内存中自己的区域来进行写入,但它可以从任何位置读取。
- 在访问用于写入的groupshared(组共享)内存时,必须使用 SV_GroupIndex 或 SV_DispatchThreadID
- Groupshared 内存限制为每组16KB。
- 单个线程被限制为256字节的groupshared (组共享)内存区域,以供写入。
- 没有原子指令可用。
- 没有双精度值可用。
在Direct3D 11.x硬件上使用计算着色器
Direct3D 11上的计算着色器也称为DirectCompute 5.0。
当您使用cs_5_0profiles(配置文件)支持的DirectCompute时,请记住以下几点:
- 每个组的最大线程数限制为D3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP (1024)。
- numthreads的X和Y维度被限制为D3D11_CS_THREAD_GROUP_MAX_X (1024) 和 D3D11_CS_THREAD_GROUP_MAX_Y (1024).
- numthreads的Z维度被限于D3D11_CS_THREAD_GROUP_MAX_Z (64).
- dispatch(分派)最大维度被限制在 D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535).
- 可以绑定到着色器的无序访问视图的最大数量是 D3D11_PS_CS_UAV_REGISTER_COUNT (8).
- 支持RWStructuredBuffers、RWByteAddressBuffers和类型化的无序访问 (RWTexture1D、RWTexture2D、RWTexture3D等等).
- 原子指令是可用的。
- 可以提供双精度支持。或者有关如何确定双精度是否可用的信息,请参阅D3D11_FEATURE_DOUBLES.
本节内容
主题 | 描述 |
Direct3D 11中增加了几种新的资源类型。 | |
访问资源的几种方法。 | |
要访问新的资源类型或共享内存,使用一个互锁的内在函数。联锁函数保证原子操作。也就是说,它们保证按照程序的顺序发生。本节列出原子函数。 |
相关主题