DirectCompute

本文介绍了DirectCompute技术的基本概念,包括创建过程、资源管理和执行方式。此外还详细解释了与计算着色器相关的系统语义,如SV_GroupID、SV_GroupThreadID等。

 DirectCompute网上各种介绍,特性很简单就是用GPU进行计算,注意资源并不是从管线里面获取的。

 

创建:

1.编译:D3DCompileFromFile

2.创建:ID3D11Device :: CreateComputeShader

 

资源(dx) :

CSSetConstantBuffers :设置恒定的缓冲区所使用的计算着色器的阶段。

CSSetSamplers :设置一个数组,计算着色器阶段的采样状态。

CSSetShader :设置一个计算着色到该设备。

CSSetShaderResources :数组绑定的着色器资源的计算着色器阶段。

CSSetUnorderedAccessViews :设置一个数组,无序的资源的观点。

除增加一个无序的view其他的跟别的shader一样。

资源(hlsl) :

RWBuffer

RWTexture1DRWTexture1DArray

RWTexture2DRWTexture2DArray

RWTexture3D

StructuredBuffer

RWStructuredBuffer

由于之前都是只读的,为CS增加了一组读写的。

 

执行:

ID3D11DeviceContext::Dispatch :一个三维的阵列,记录着要调度的线程组的次数。

ID3D11DeviceContext::DispatchIndirect

// C++ application code 
pImmediateContext->Dispatch(Width / THREADSX, Height / THREADSY, 1 ); 

// HLSL compute shader code 
[numthreads(THREADSX, THREADSY, 1)] 
void CS_QJulia4D( uint3 Gid : SV_GroupID, uint3 DTid : SV_DispatchThreadID, uint3 GTid : SV_GroupThreadID, uint GI : SV_GroupIndex )

的Dispatch的参数与hlsl里面的numthreads是有联系的,表示的是线程组X,Y,Z三个维度的数组,目前shader model5 是x :1024 y:1024 z:64 超出就废了。

 

系统语义:

SV_GroupID :一个xyz三维向量,描述的是当前线程组在整个调度中的位置[0,n-1]

SV_GroupThreadID :一个xyz的三维向量,记录当前线程在线程组中的三维位置[0,n-1]

SV_DispatchThreadID :一个xyz的三维向量,它记录的是当前线程在整个调度中的位置,如果说groupthreadID是相对当前线程组的,那么dispatchthreadID就是全局的一个位置。

SV_GroupIndex :它是一个索引,记录当前线程在当前线程组中的索引位置,它是一维的。

 

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

插图调度,线程组和线程之间的关系

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值