You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:55:25