因此,我试图为一个具有三个组件元素的缓冲区创建一个无序的访问视图,但是这个警告失败了:
D3D11 ERROR: ID3D11Device::CreateUnorderedAccessView:
The format (0x7, R32G32B32_UINT) cannot be used with a Typed Unordered Access View.
[ STATE_CREATION ERROR #2097343: CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT].
这是我的密码:
void test(ID3D11Device* dev_ctx) {
D3D11_BUFFER_DESC buff_desc;
memset(&buff_desc, 0, sizeof(buff_desc));
buff_desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_UNORDERED_ACCESS;
buff_desc.ByteWidth = 1024 * 12;
buff_desc.CPUAccessFlags = 0;
buff_desc.MiscFlags = 0;
buff_desc.StructureByteStride = 12;
buff_desc.Usage = D3D11_USAGE_DEFAULT;
ID3D11Buffer* buff_ptr = nullptr;
dev_ctx->CreateBuffer(&buff_desc, nullptr, &buff_ptr);
if (!buff_ptr)
return;
D3D11_UNORDERED_ACCESS_VIEW_DESC uav_desc;
uav_desc.Format = DXGI_FORMAT_R32G32B32_UINT;
uav_desc.ViewDimension = D3D11_UAV_DIMENSION_BUFFER;
uav_desc.Buffer.FirstElement = 0;
uav_desc.Buffer.Flags = 0;
uav_desc.Buffer.NumElements = 1024;
ID3D11UnorderedAccessView* uav_ptr = nullptr;
dev_ctx->CreateUnorderedAccessView(buff_ptr, &uav_desc, &uav_ptr);
if (!uav_ptr)
return;
}
对于具有三个组件(R32G32B32_*
)的任何资源,它都会失败,但如果资源有1/2/4组件,则可以工作。那么有什么问题呢?
发布于 2014-10-16 20:20:17
这个问题基本上是在错误信息中为您阐明的: Direct3D不支持在类型化无人机中使用R32G32B32_UINT
格式。MSDN有一节介绍了类型化无人机所支持的格式。R32G32B32_UINT
不在名单上。
https://gamedev.stackexchange.com/questions/86005
复制相似问题