有没有人能帮助我准确地理解这里不起作用的步骤?
我正在尝试使用C++-AMP来做并行循环,然而,尽管在我的过程中没有遇到任何问题或错误,我还是无法获得最终的数据。
我想通过映射的方式提取我的数据
m_pDeviceContext->Map(pBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource);
{
blah
}但我已经连续几天在这上面工作了几天,甚至没有一英寸的进展。
下面是我使用C++-AMP所做的一切:
构造函数:我初始化我的变量,因为我必须
: m_AcceleratorView(concurrency::direct3d::create_accelerator_view(reinterpret_cast<IUnknown *>(_pDevice)))
, m_myArray(_uiNumElement, m_AcceleratorView)我将初始数据复制到C++-AMP数组中
concurrency::copy(Data.begin(), m_myArray);我对数据做了一些处理
concurrency::parallel_for_each(...) restrict(amp)
{
blah
}所有这些看起来都很好,我没有遇到任何错误。
然而,我想要做的下一步是从缓冲区中拉出数据,这似乎不起作用:
ID3D11Buffer* pBuffer = reinterpret_cast<ID3D11Buffer *>(concurrency::direct3d::get_buffer(m_myArray));当我映射这个数据(deviceContext-> map )时,里面的数据是0x00000000
我忘记了允许我读取此数据的哪一步?即使当我试图设置CPU读/写访问类型时,我也得到了一个错误,我甚至没有看到我的任何引用都是这样做的:
m_Accelerator.set_default_cpu_access_type(concurrency::access_type::access_type_read_write);这会产生一个错误,说"accelerator不支持零拷贝“
谁能帮帮我,告诉我为什么我不能读取我的缓冲区,以及如何修复它?
发布于 2014-11-14 06:30:38
下面的代码应该可以解决这个问题。您还应检查您的DX设备和C++AMP加速器是否与相同的硬件关联。
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));这个问题有一个答案,告诉你如何反其道而行之。
https://stackoverflow.com/questions/26830118
复制相似问题