2014-09-25 25 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