| 155 | } |
| 156 | |
| 157 | void CreateResource(CD3DX12_RESOURCE_DESC desc, const unsigned int flags, const char* name) |
| 158 | { |
| 159 | D3D12_RESOURCE_FLAGS resourceFlags = D3D12_RESOURCE_FLAG_NONE; |
| 160 | D3D12_RESOURCE_STATES initialState = (D3D12_RESOURCE_STATES)D3D12_RESOURCE_STATE_COPY_DEST; |
| 161 | |
| 162 | |
| 163 | if (flags & EI_BF_NEEDSUAV) |
| 164 | { |
| 165 | resourceFlags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; |
| 166 | initialState = (D3D12_RESOURCE_STATES)D3D12_RESOURCE_STATE_UNORDERED_ACCESS; |
| 167 | } |
| 168 | |
| 169 | desc.Flags = resourceFlags; |
| 170 | m_ResourceDesc = desc; |
| 171 | |
| 172 | wchar_t uniName[1024]; |
| 173 | swprintf(uniName, 1024, L"%S", name); |
| 174 | |
| 175 | if (flags & EI_BF_NEEDSCPUMEMORY) { |
| 176 | CD3DX12_RESOURCE_DESC cpuDesc = desc; |
| 177 | cpuDesc.Flags = D3D12_RESOURCE_FLAG_NONE; |
| 178 | ThrowIfFailed(pDevice->GetDevice()->CreateCommittedResource( |
| 179 | &CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_UPLOAD), |
| 180 | D3D12_HEAP_FLAG_NONE, |
| 181 | &cpuDesc, |
| 182 | D3D12_RESOURCE_STATE_GENERIC_READ, |
| 183 | nullptr, |
| 184 | IID_PPV_ARGS(&cpuBuffer))); |
| 185 | |
| 186 | cpuBuffer->SetName(uniName); |
| 187 | } |
| 188 | |
| 189 | ThrowIfFailed(pDevice->GetDevice()->CreateCommittedResource( |
| 190 | &CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT), |
| 191 | D3D12_HEAP_FLAG_NONE, |
| 192 | &desc, |
| 193 | initialState, |
| 194 | nullptr, |
| 195 | IID_PPV_ARGS(&gpuBuffer))); |
| 196 | |
| 197 | gpuBuffer->SetName(uniName); |
| 198 | |
| 199 | if (flags & EI_BF_INDEXBUFFER) |
| 200 | { |
| 201 | indexBufferView.BufferLocation = gpuBuffer->GetGPUVirtualAddress(); |
| 202 | indexBufferView.Format = DXGI_FORMAT_R32_UINT; |
| 203 | indexBufferView.SizeInBytes = m_totalMemSize; |
| 204 | } |
| 205 | } |
| 206 | |
| 207 | void FreeCPUMemory() |
| 208 | { |
nothing calls this directly
no outgoing calls
no test coverage detected