2014-09-25 96 views
1

DX11后备缓冲根据这一毫秒的博客文章 http://blogs.msdn.com/b/nativeconcurrency/archive/2012/07/02/interop-with-direct3d-textures-in-c-amp.aspx写从C++ AMP

您可以直接写在C++ AMP后备缓冲。

使用Interop,您可以使用IDXGISwapChain获取与窗口关联的后台缓冲区的纹理对象,并直接在C++ AMP内核中更新它。

我创建从DX设备的放大器设备描述符,我得到了一个指针后备缓冲区,然后试图从它使功放的质感,但我发现,纹理描述符bindFlags后备缓冲区,只D3D11_BIND_RENDER_TARGET和我需要至少D3D11_BIND_UNORDERED_ACCESS或D3D11_BIND_SHADER_RESOURCE为了Concurrency :: graphics :: direct3d :: make_texture发挥作用。

我可以很容易地做出任何其他D3D纹理,并将其连接到放大器,如果我设置bindflags,但对于设置在backbuffer上的标志,我无法连接它们。

然后我发现这个职位 http://social.msdn.microsoft.com/Forums/vstudio/en-US/15aa1186-210b-4ba7-89b0-b74f742d6830/c-amp-and-direct2d

它具有以下由微软社区贡献者

我想写直接备份交换链的缓冲标记的答案。据我所知,这是无法完成的,因为创建后台缓冲区纹理时可以使用的使用标志与C++ AMP操作纹理所需的使用标志不兼容。

因此,一方面,它(从C++ AMP写入backbuffer)是一个互操作的例子,另一方面它被解释为不可能...?

我目前的要求只是在C++ AMP中生成光线跟踪图像,并且显示在d3d显示器上每帧没有从图形卡复制数据。我意识到我可以生成我自己的纹理,然后渲染一个四边形,但直接写入后缓冲器会更简单,如果可以完成,那就是我想要做的。

也许这里有人可以解释它是否可以完成,需要采取哪些步骤来完成这个任务,或者可以解释说不,这是不可能完成的。

在此先感谢您对此主题的任何帮助。

[编辑] 我现在发现这个信息 https://software.intel.com/en-us/articles/microsoft-directcompute-on-intel-ivy-bridge-processor-graphics

//此资格后缓冲区为是计算着色器的目标写入 sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_UNORDERED_ACCESS | DXGI_USAGE_SHADER_INPUT;

其实我尝试以前,但调用CreateSwapChainForCoreWindow失败 第一次机会异常在0x75251D4D在TestDxAmp.exe:微软C++异常:平台:: InvalidArgumentException ^内存位置0x0328E484。 HRESULT:0x80070057参数不正确。

这不是非常有用的信息。

+0

编辑原帖 – JoeTaicoon 2014-09-26 07:32:14

回答

0

我觉得原来的论坛帖子可能是误导性的。对于纹理和缓冲区互操作,AMP互操作都需要无序的访问绑定。 AMP构建在DX/DirectCompute之上,因此在英特尔链接中都提到了这两种情况。

您的程序可以使用make_array()函数创建一个与现有Direct3D 缓冲区关联的阵列。

template<typename T, int N> 

array<T,N> make_array(const extent& ext, IUnknown* buffer); 

的 的Direct3D缓冲区必须实现ID3D11Bufferinterface。它必须支持原始视图(D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS),并且 允许SHADER_RESOURCE和UNORDERED_ACCESS绑定。缓冲区本身 必须是正确的大小,区域的大小乘以缓冲区类型的大小 。以下代码使用make_array创建 数组,使用在前面部分 中创建的accelerator_view,dxView:HRESULT hr = S_OK;

- C++ AMP Book

我不是一个DX专家,但在下面的帖子看起来你可以配置交换链来支持无人机。

Sobel Filter Compute Shader

+0

感谢您的链接。看起来它也只是将UnorderedAccess变成了我所尝试过的那种,而且其中的失败如上所述。我想我必须看看我能否以不同方式设置dx设备。我没有提到的一件事是,这是一个Windows应用商店,可能会让事情变得复杂。 – JoeTaicoon 2014-09-27 09:24:18