【发布时间】:2020-11-06 16:54:44
【问题描述】:
我想使用计算着色器进行后期处理。所以想法是将CS输出设置为后台缓冲区。据我所知,这意味着使用无人机。但后台缓冲区使用 BGRA。所以这个:
Microsoft::WRL::ComPtr<ID3D11Texture2D> pBackBuffer;
pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), &pBackBuffer);
D3D11_UNORDERED_ACCESS_VIEW_DESC uav_desc;
uav_desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;// BGRA!
uav_desc.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE2D;
uav_desc.Texture2D.MipSlice = 0;
Microsoft::WRL::ComPtr<ID3D11UnorderedAccessView> pUnorderedAccessView;
pDevice->CreateUnorderedAccessView(
pBackBuffer.Get(),
&uav_desc,
&pUnorderedAccessView);
生成错误:格式(0x57,B8G8R8A8_UNORM)不能用于类型化无序访问视图。
如果我尝试将格式更改为符合MDOCS 的兼容格式:
...
uav_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;// RGBA!
...
生成错误:创建视图时,格式(0x1c,R8G8B8A8_UNORM)无效;资源已使用完全限定的格式创建,该格式不可转换(0x57,B8G8R8A8_UNORM)。
问题是我不在乎格式是什么,因为它可以在计算着色器中修复!
有没有办法绕过这个?或者也许不使用无人机进行 CS 输出?
【问题讨论】:
标签: c++ directx directx-11