-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathDXStructuredBuffer.cpp
More file actions
59 lines (43 loc) · 1.71 KB
/
DXStructuredBuffer.cpp
File metadata and controls
59 lines (43 loc) · 1.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "DXStructuredBuffer.h"
DXStructuredBuffer::DXStructuredBuffer(ID3D11Device* d, unsigned int s, unsigned int n)
{
D3D11_BUFFER_DESC sbDesc;
D3D11_UNORDERED_ACCESS_VIEW_DESC sbUAVDesc;
D3D11_SHADER_RESOURCE_VIEW_DESC sbSRVDesc;
ZeroMemory(&sbDesc, sizeof(sbDesc));
ZeroMemory(&sbUAVDesc, sizeof(sbUAVDesc));
ZeroMemory(&sbSRVDesc, sizeof(sbSRVDesc));
sbDesc.BindFlags = D3D11_BIND_UNORDERED_ACCESS | D3D11_BIND_SHADER_RESOURCE;
sbDesc.MiscFlags = D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;
sbDesc.StructureByteStride = s;
sbDesc.ByteWidth = sbDesc.StructureByteStride * n;
sbDesc.Usage = D3D11_USAGE_DEFAULT;
HRESULT hr = d->CreateBuffer(&sbDesc, NULL, &this->buffer);
if (hr != S_OK) throw 1;
// UAV
sbUAVDesc.Buffer.NumElements = sbDesc.ByteWidth / sbDesc.StructureByteStride;
sbUAVDesc.Format = DXGI_FORMAT_UNKNOWN; //DXGI_FORMAT_R8G8B8A8_UNORM
sbUAVDesc.ViewDimension = D3D11_UAV_DIMENSION_BUFFER;
hr = d->CreateUnorderedAccessView((ID3D11Resource *) this->buffer, &sbUAVDesc, &this->uav);
if (hr != S_OK) throw 1;
// SRV
sbSRVDesc.Buffer.ElementWidth = sbDesc.StructureByteStride;
sbSRVDesc.Buffer.FirstElement = sbUAVDesc.Buffer.FirstElement;
sbSRVDesc.Buffer.NumElements = sbUAVDesc.Buffer.NumElements;
sbSRVDesc.Format = DXGI_FORMAT_UNKNOWN;
sbSRVDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER;
hr = d->CreateShaderResourceView((ID3D11Resource*) this->buffer, &sbSRVDesc, &this->srv);
if (hr != S_OK) throw 1;
}
DXStructuredBuffer::~DXStructuredBuffer()
{
//this->buffer->Release();
//this->uav->Release();
//this->srv->Release();
}
ID3D11UnorderedAccessView ** DXStructuredBuffer::getUAV() {
return &this->uav;
}
ID3D11ShaderResourceView ** DXStructuredBuffer::getSRV() {
return &this->srv;
}