首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用C++-AMP访问缓冲区

使用C++-AMP访问缓冲区
EN

Stack Overflow用户
提问于 2014-11-09 23:59:09
回答 1查看 243关注 0票数 2

有没有人能帮助我准确地理解这里不起作用的步骤?

我正在尝试使用C++-AMP来做并行循环,然而,尽管在我的过程中没有遇到任何问题或错误,我还是无法获得最终的数据。

我想通过映射的方式提取我的数据

代码语言:javascript
运行
复制
m_pDeviceContext->Map(pBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource);
{
    blah
}

但我已经连续几天在这上面工作了几天,甚至没有一英寸的进展。

下面是我使用C++-AMP所做的一切:

构造函数:我初始化我的变量,因为我必须

代码语言:javascript
运行
复制
: m_AcceleratorView(concurrency::direct3d::create_accelerator_view(reinterpret_cast<IUnknown *>(_pDevice)))
, m_myArray(_uiNumElement, m_AcceleratorView)

我将初始数据复制到C++-AMP数组中

代码语言:javascript
运行
复制
concurrency::copy(Data.begin(), m_myArray);

我对数据做了一些处理

代码语言:javascript
运行
复制
concurrency::parallel_for_each(...) restrict(amp)
{
   blah
}

所有这些看起来都很好,我没有遇到任何错误。

然而,我想要做的下一步是从缓冲区中拉出数据,这似乎不起作用:

代码语言:javascript
运行
复制
ID3D11Buffer* pBuffer = reinterpret_cast<ID3D11Buffer *>(concurrency::direct3d::get_buffer(m_myArray));

当我映射这个数据(deviceContext-> map )时,里面的数据是0x00000000

我忘记了允许我读取此数据的哪一步?即使当我试图设置CPU读/写访问类型时,我也得到了一个错误,我甚至没有看到我的任何引用都是这样做的:

代码语言:javascript
运行
复制
m_Accelerator.set_default_cpu_access_type(concurrency::access_type::access_type_read_write);

这会产生一个错误,说"accelerator不支持零拷贝“

谁能帮帮我,告诉我为什么我不能读取我的缓冲区,以及如何修复它?

EN

回答 1

Stack Overflow用户

发布于 2014-11-14 06:30:38

下面的代码应该可以解决这个问题。您还应检查您的DX设备和C++AMP加速器是否与相同的硬件关联。

代码语言:javascript
运行
复制
HRESULT hr = S_OK;
array<int, 1> arr(1024);
CComPtr<ID3D11Buffer> buffer;
IUnknown* unkBuf = get_buffer(arr);
hr = unkBuf->QueryInterface(__uuidof(ID3D11Buffer), reinterpret_cast<LPVOID*>(&buffer));

这个问题有一个答案,告诉你如何反其道而行之。

Reading Buffer Data using C++ AMP

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

https://stackoverflow.com/questions/26830118

复制
相关文章

相似问题

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