首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我不能创建R32G32B32_UINT缓冲区的无序访问视图?

为什么我不能创建R32G32B32_UINT缓冲区的无序访问视图?
EN

Game Development用户
提问于 2014-10-16 19:53:42
回答 1查看 4.8K关注 0票数 1

因此,我试图为一个具有三个组件元素的缓冲区创建一个无序的访问视图,但是这个警告失败了:

代码语言:javascript
运行
复制
D3D11 ERROR: ID3D11Device::CreateUnorderedAccessView:
The format (0x7, R32G32B32_UINT) cannot be used with a Typed Unordered Access View.
[ STATE_CREATION ERROR #2097343: CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT].

这是我的密码:

代码语言:javascript
运行
复制
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组件,则可以工作。那么有什么问题呢?

EN

回答 1

Game Development用户

发布于 2014-10-16 20:20:17

这个问题基本上是在错误信息中为您阐明的: Direct3D不支持在类型化无人机中使用R32G32B32_UINT格式。MSDN有一节介绍了类型化无人机所支持的格式。R32G32B32_UINT不在名单上。

票数 3
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/86005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档