raSystem  1.0 bata
raCSIOBuffer.cpp
Go to the documentation of this file.
1 #include "..\include\raMain.h"
2 
3 namespace System
4 {
5  raCSIOBuffer::raCSIOBuffer(raDirectX *dx, LPCSTR ShaderFileName, LPCSTR FunctionName,
6  const raFloat* pData, UINT numElements) : raCSRessource(dx, ShaderFileName, FunctionName)
7  {
8  m_pData = pData;
9  m_numElements = numElements;
10  }
11 
13  {
14  }
16  {
18 
19  D3D11_BUFFER_DESC bufDesc;
20  memset(&bufDesc, 0, sizeof(bufDesc));
21  bufDesc.BindFlags = D3D11_BIND_UNORDERED_ACCESS | D3D11_BIND_SHADER_RESOURCE |
22  D3D11_BIND_VERTEX_BUFFER;
23  bufDesc.ByteWidth = 4 * m_numElements;
24  bufDesc.MiscFlags = D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS;
25 
26  D3D11_SUBRESOURCE_DATA InitData;
27  InitData.pSysMem = (float*)m_pData;
28  HRESULT hr = m_dx->GetDevice()->CreateBuffer(&bufDesc, &InitData, (ID3D11Buffer**)&m_pResource);
29  if(FAILED(hr))
30  {
31  RERROR_DX11("CreateBuffer", hr);
32  return false;
33  }
34 
35  D3D11_UNORDERED_ACCESS_VIEW_DESC viewDesc;
36  memset(&viewDesc, 0, sizeof(viewDesc));
37  viewDesc.ViewDimension = D3D11_UAV_DIMENSION_BUFFER;
38  viewDesc.Buffer.FirstElement = 0;
39 
40  viewDesc.Format = DXGI_FORMAT_R32_TYPELESS;
41  viewDesc.Buffer.Flags = D3D11_BUFFER_UAV_FLAG_RAW;
42  viewDesc.Buffer.NumElements = bufDesc.ByteWidth / 4;
43 
44  hr = m_dx->GetDevice()->CreateUnorderedAccessView(m_pResource, &viewDesc,
45  (ID3D11UnorderedAccessView**)&m_pView);
46 
47  if(FAILED(hr))
48  {
49  RERROR_DX11("CreateUnorderedAccessView", hr);
50  return false;
51  }
52 
53  return true;
54  }
55  bool raCSIOBuffer::RunCS(UINT ThreadGroupCountX,
56  UINT ThreadGroupCountY,
57  UINT ThreadGroupCountZ)
58  {
59  ID3D11UnorderedAccessView *aView[1] = { (ID3D11UnorderedAccessView*)m_pView };
60 
61  m_dx->GetImmediateContext()->CSSetUnorderedAccessViews(0, 1, aView, (UINT*)(&aView));
62 
63  raCSRessource::RunCS(ThreadGroupCountX, ThreadGroupCountY, ThreadGroupCountZ);
64 
65  ID3D11UnorderedAccessView* ppViewNull[1] = { 0 };
66 
67  m_dx->GetImmediateContext()->CSSetUnorderedAccessViews(0, 1, ppViewNull, (UINT*)(&aView));
68 
69  return true;
70  }
71 };
ID3D11DeviceContext * GetImmediateContext(void)
Definition: raDirectX.h:31
void RAPI RERROR_DX11(raString x, HRESULT h)
Definition: raMain.cpp:156
ID3D11Device * GetDevice(void)
Definition: raDirectX.h:29
float raFloat
Definition: raMain.h:106
virtual bool RunCS(UINT ThreadGroupCountX, UINT ThreadGroupCountY, UINT ThreadGroupCountZ)
virtual ~raCSIOBuffer(void)
raCSIOBuffer(raDirectX *dx, LPCSTR ShaderFileName, LPCSTR FunctionName, const raFloat *pData, UINT numElements)
Definition: raCSIOBuffer.cpp:5
virtual bool RunCS(UINT ThreadGroupCountX, UINT ThreadGroupCountY, UINT ThreadGroupCountZ)
UINT m_numElements
Definition: raCSIOBuffer.h:20
ID3D11Buffer D3D11_BUFFER_DESC void * pData
Definition: raSDKmesh.h:238
virtual bool Create()
ID3D11View * m_pView
Definition: raCSRessource.h:13
ID3D11Resource * m_pResource
Definition: raCSRessource.h:12
const raFloat * m_pData
Definition: raCSIOBuffer.h:19