directx10 11中读写gpu的resource方法补充总结

本文补充总结了在DirectX 10/11中读写GPU资源的方法,包括通过Map函数、CopyResource()、UpdateSubresource()等。介绍了D3D11_USAGE的不同类型,强调了D3D11_USAGE_DEFAULT和D3D11_USAGE_IMMUTABLE不能通过Map()函数访问,并探讨了CPU如何更新D3D11_USAGE_DEFAULT资源的复杂过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    前面说过可以通过map函数来用cpu来读写gpu的计算数据。这几天又看了些文章后,感觉自己前面的理解有点肤浅。再来补充总结下。

    首先如果想更新GPU中的resource,1是可以通过map()函数来让CPU读写GPU的数据;2还可以通过ID3D11DeviceContext::CopyResource(),ID3D11DeviceContext::UpdateSubresource()等来直接让GPU写更新它自己的resource。

    对于上面几个方法的异同呢,可以参考SDK如下: Each usage dictates a tradeoff between functionality and performance. In general, resource accessing is accomplished with the following APIs. CPU access is done with ID3D11DeviceContext::Map. GPU access is done with ID3D11DeviceContext::CopySubresourceRegion, ID3D11DeviceContext::CopyResource, or ID3D11DeviceContext::UpdateSubresource.

    从上简单看出采用Map(),通过CPU能access resource,剩下的方法是直接让GPU来access resource。 为了将让我们理解的数据(int,float之类)输出到屏幕控制台之类的(gpu没有传统的i/o功能),我们还是要通过cpu来读写gpu中的数据。当然如果只是GPU内部的计算,就让GPU来读写就可以了。

     至于在创建哪种GPU读写或者CPU读写的buffer的时候,要非常注意。其中我们都会先创建一个D3D11_BUFFER_DESC来描述我们的buffer。在D3D11_BUFFER_DESC里面,有个D3D11_USAGE Usage,它

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值