MCPcopy Create free account
hub / github.com/davideberly/GeometricTools / DX11StructuredBuffer

Method DX11StructuredBuffer

GTE/Graphics/DX11/DX11StructuredBuffer.cpp:19–84  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

17}
18
19DX11StructuredBuffer::DX11StructuredBuffer(ID3D11Device* device, StructuredBuffer const* sbuffer)
20 :
21 DX11Buffer(sbuffer),
22 mSRView(nullptr),
23 mUAView(nullptr),
24 mCounterStaging(nullptr)
25{
26 // Specify the buffer description.
27 D3D11_BUFFER_DESC desc;
28 desc.ByteWidth = sbuffer->GetNumBytes();
29 desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
30 desc.MiscFlags = D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;
31 desc.StructureByteStride = sbuffer->GetElementSize();
32 uint32_t usage = sbuffer->GetUsage();
33 if (usage == Resource::Usage::IMMUTABLE)
34 {
35 desc.Usage = D3D11_USAGE_IMMUTABLE;
36 desc.CPUAccessFlags = D3D11_CPU_ACCESS_NONE;
37 }
38 else if (usage == Resource::Usage::DYNAMIC_UPDATE)
39 {
40 desc.Usage = D3D11_USAGE_DYNAMIC;
41 desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
42 }
43 else // usage == Resource::Usage::SHADER_OUTPUT
44 {
45 desc.Usage = D3D11_USAGE_DEFAULT;
46 desc.BindFlags |= D3D11_BIND_UNORDERED_ACCESS;
47 desc.CPUAccessFlags = D3D11_CPU_ACCESS_NONE;
48 }
49
50 // Create the buffer.
51 ID3D11Buffer* buffer = nullptr;
52 if (sbuffer->GetData())
53 {
54 D3D11_SUBRESOURCE_DATA data;
55 data.pSysMem = sbuffer->GetData();
56 data.SysMemPitch = 0;
57 data.SysMemSlicePitch = 0;
58 DX11Log(device->CreateBuffer(&desc, &data, &buffer));
59 }
60 else
61 {
62 DX11Log(device->CreateBuffer(&desc, nullptr, &buffer));
63 }
64 mDXObject = buffer;
65
66 // Create views of the buffer.
67 CreateSRView(device);
68 if (usage == Resource::Usage::SHADER_OUTPUT)
69 {
70 CreateUAView(device);
71 }
72
73 // Create a staging buffer if requested.
74 if (sbuffer->GetCopy() != Resource::Copy::NONE)
75 {
76 CreateStaging(device, desc);

Callers

nothing calls this directly

Calls 6

GetElementSizeMethod · 0.80
GetCounterTypeMethod · 0.80
GetNumBytesMethod · 0.45
GetUsageMethod · 0.45
GetDataMethod · 0.45
GetCopyMethod · 0.45

Tested by

no test coverage detected