【发布时间】:2014-10-19 07:08:15
【问题描述】:
我似乎找不到让自己从我的 AMP 数组中读取数据的方法。
我希望能够做的是获取我的缓冲区,将其复制到向量中,然后使用该向量。我知道我应该设置 CPU 访问标志,但是我在这样做时遇到了麻烦。
首先,这就是我尝试访问缓冲区的方式。我先把它放在这里,以防我做了不应该做的事情。也许有一个我错过的内置函数可以为我做这件事?
std::vector<Pticle> vecParticles;
ID3D11Buffer* pBuffer = reinterpret_cast<ID3D11Buffer *>(concurrency::direct3d::get_buffer(m_arrParticles));
D3D11_MAPPED_SUBRESOURCE MappedResource;
m_pDeviceContext->Map(pBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource);
{
auto pData = (Pticle*)MappedResource.pData;
for (unsigned i = 0; i < m_uiNumParticles; ++i)
{
vecParticles.push_back(pData[i]);
}
}
m_pDeviceContext->Unmap(pBuffer, 0);
基本上它应该将缓冲区中的所有数据写入向量中
现在我知道我应该设置我的访问标志,但我似乎做不到。我在初始化时写了以下函数:
m_Accelerator.set_default_cpu_access_type(concurrency::access_type::access_type_read_write);
但是它会中断,并出现以下错误
"Invalid access_type specified. accelerator does not support zero copy."
我不确定这意味着什么,如果我尝试将其设置为读写,它没有通过测试吗?它也适用于我尝试的任何访问类型。
如何设置它以便从缓冲区读取数据?
【问题讨论】: