DirectX12中AppendStructuredBuffer与ConsumeStructuredBuffer的支持及使用问题
DirectX12中AppendStructuredBuffer与ConsumeStructuredBuffer的使用问题
在《3D Game Programming with DirectX 12》(龙书)第13章几何着色器章节中提到了AppendStructuredBuffer和ConsumeStructuredBuffer的示例,但未提供详细代码。本人尝试使用这类缓冲区时失败,因此想确认以下几点:
- DirectX12是否允许使用这两种缓冲区
- 这两种缓冲区的具体使用方法
- 对应的根签名(rootSignature)设置方式
以下是本人编写的HLSL代码:
ConsumeStructuredBuffer<int3> gInput : register(u0); AppendStructuredBuffer<float> gOutput : register(u1); [numthreads(64, 1, 1)] void CS(int3 dispatchThreadID : SV_DispatchThreadID) { // gOutput[dispatchThreadID.x] = length(gInput[dispatchThreadID.x]); int3 p = gInput.Consume(); gOutput.Append(length(float3(p))); }
本人查阅DirectX12官方文档后获取到以下提示:
The UAV format bound to this resource needs to be created with the DXGI_FORMAT_UNKNOWN format.
The UAV bound to this resource must have been created with D3D11_BUFFER_UAV_FLAG_APPEND.
于是尝试构建UAV、其堆并使用描述符表,但在填充D3D12_UNORDERED_ACCESS_VIEW_DESC成员时遇到问题:
D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc; uavDesc.Format = DXGI_FORMAT_UNKNOWN; uavDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; uavDesc.Buffer.FirstElement = 0; uavDesc.Buffer.NumElements = 64; uavDesc.Buffer.Flags = D3D11_BUFFER_UAV_FLAG_APPEND; // ????
DirectX12中不存在D3D11_BUFFER_UAV_FLAG_APPEND这个枚举成员,特此求助。
内容的提问来源于stack exchange,提问作者Shuaigougou
相关产品推荐
相关产品推荐

