MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / OnInit

Method OnInit

Source/Engine/GraphicsDevice/DirectX/DX11/GPUBufferDX11.cpp:69–165  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

67}
68
69bool GPUBufferDX11::OnInit()
70{
71 bool useSRV = IsShaderResource();
72 bool useUAV = IsUnorderedAccess();
73
74 // Create buffer description
75 D3D11_BUFFER_DESC bufferDesc;
76 bufferDesc.ByteWidth = _desc.Size;
77 bufferDesc.Usage = RenderToolsDX::ToD3D11Usage(_desc.Usage);
78 bufferDesc.BindFlags = 0;
79 bufferDesc.CPUAccessFlags = RenderToolsDX::GetDX11CpuAccessFlagsFromUsage(_desc.Usage);
80 bufferDesc.MiscFlags = 0;
81 bufferDesc.StructureByteStride = 0;
82 if (EnumHasAnyFlags(_desc.Flags, GPUBufferFlags::VertexBuffer))
83 bufferDesc.BindFlags |= D3D11_BIND_VERTEX_BUFFER;
84 if (EnumHasAnyFlags(_desc.Flags, GPUBufferFlags::IndexBuffer))
85 bufferDesc.BindFlags |= D3D11_BIND_INDEX_BUFFER;
86 if (useSRV)
87 bufferDesc.BindFlags |= D3D11_BIND_SHADER_RESOURCE;
88 if (useUAV)
89 bufferDesc.BindFlags |= D3D11_BIND_UNORDERED_ACCESS;
90
91 if (EnumHasAnyFlags(_desc.Flags, GPUBufferFlags::Argument))
92 bufferDesc.MiscFlags |= D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS;
93 if (EnumHasAnyFlags(_desc.Flags, GPUBufferFlags::RawBuffer))
94 bufferDesc.MiscFlags |= D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS;
95 if (EnumHasAnyFlags(_desc.Flags, GPUBufferFlags::Structured))
96 {
97 bufferDesc.MiscFlags |= D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;
98 bufferDesc.StructureByteStride = _desc.Stride;
99 }
100
101 // Create resource
102 D3D11_SUBRESOURCE_DATA data;
103 if (_desc.InitData)
104 {
105 data.pSysMem = _desc.InitData;
106 data.SysMemPitch = bufferDesc.ByteWidth;
107 data.SysMemSlicePitch = 0;
108 }
109 VALIDATE_DIRECTX_CALL(_device->GetDevice()->CreateBuffer(&bufferDesc, _desc.InitData ? &data : nullptr, &_resource));
110
111 // Set state
112 DX_SET_DEBUG_NAME(_resource, GetName());
113 _memoryUsage = _desc.Size;
114 int32 numElements = _desc.GetElementsCount();
115
116 // Create views
117 if (useSRV)
118 {
119 D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
120 if (EnumHasAnyFlags(_desc.Flags, GPUBufferFlags::RawBuffer))
121 {
122 srvDesc.Format = DXGI_FORMAT_R32_TYPELESS;
123 srvDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFEREX;
124 srvDesc.BufferEx.FirstElement = 0;
125 srvDesc.BufferEx.NumElements = numElements;
126 srvDesc.BufferEx.Flags = D3D11_BUFFEREX_SRV_FLAG_RAW;

Callers

nothing calls this directly

Calls 9

ToD3D11UsageFunction · 0.85
EnumHasAnyFlagsFunction · 0.85
IsShaderResourceFunction · 0.50
IsUnorderedAccessFunction · 0.50
CreateBufferMethod · 0.45
GetDeviceMethod · 0.45
SetSRVMethod · 0.45
SetUAVMethod · 0.45

Tested by

no test coverage detected