| 299 | } |
| 300 | |
| 301 | TextureID Device::CreateTexture(ResourceType type, Backend::IL::Format format, uint32_t width, uint32_t height, uint32_t depth, const void *data, uint64_t dataSize) { |
| 302 | ResourceInfo &resource = resources.emplace_back(); |
| 303 | resource.type = type; |
| 304 | resource.format = format; |
| 305 | |
| 306 | // Destination heap |
| 307 | D3D12_HEAP_PROPERTIES heapProperties{}; |
| 308 | heapProperties.Type = D3D12_HEAP_TYPE_DEFAULT; |
| 309 | |
| 310 | // Description |
| 311 | D3D12_RESOURCE_DESC resourceDesc{}; |
| 312 | resourceDesc.Format = Translate(format); |
| 313 | resourceDesc.Width = width; |
| 314 | resourceDesc.Height = height; |
| 315 | resourceDesc.DepthOrArraySize = depth; |
| 316 | resourceDesc.MipLevels = 1; |
| 317 | resourceDesc.SampleDesc.Count = 1; |
| 318 | resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; |
| 319 | resourceDesc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; |
| 320 | |
| 321 | // Translate type |
| 322 | switch (type) { |
| 323 | default: |
| 324 | ASSERT(false, "Invalid resource type"); |
| 325 | break; |
| 326 | case ResourceType::Texture1D: |
| 327 | case ResourceType::RWTexture1D: |
| 328 | resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE1D; |
| 329 | break; |
| 330 | case ResourceType::Texture2D: |
| 331 | case ResourceType::RWTexture2D: |
| 332 | case ResourceType::Texture2DArray: |
| 333 | case ResourceType::RWTexture2DArray: |
| 334 | resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; |
| 335 | break; |
| 336 | case ResourceType::Texture3D: |
| 337 | case ResourceType::RWTexture3D: |
| 338 | resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; |
| 339 | break; |
| 340 | } |
| 341 | |
| 342 | // Create resource |
| 343 | REQUIRE(SUCCEEDED(device->CreateCommittedResource( |
| 344 | &heapProperties, |
| 345 | D3D12_HEAP_FLAG_NONE, |
| 346 | &resourceDesc, |
| 347 | D3D12_RESOURCE_STATE_GENERIC_READ, |
| 348 | nullptr, |
| 349 | IID_PPV_ARGS(&resource.resource)))); |
| 350 | |
| 351 | return TextureID(ResourceID(static_cast<uint32_t>(resources.size()) - 1)); |
| 352 | } |
| 353 | |
| 354 | ResourceLayoutID Device::CreateResourceLayout(const ResourceType *types, uint32_t count, bool isLastUnbounded) { |
| 355 | ResourceLayoutInfo &layout = resourceLayouts.emplace_back(); |
no test coverage detected