MCPcopy Create free account
hub / github.com/GPUOpen-Effects/TressFX / CreateRenderTargetResource

Method CreateRenderTargetResource

src/DX12/DX12EngineInterfaceImpl.cpp:376–442  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

374#endif // TRESSFX_DEBUG_UAV
375
376std::unique_ptr<EI_Resource> EI_Device::CreateRenderTargetResource(const int width, const int height, const size_t channels, const size_t channelSize, const char* name, AMD::float4* ClearValues /*= nullptr*/)
377{
378 EI_Resource* res = new EI_Resource;
379
380 res->m_ResourceType = EI_ResourceType::Texture;
381 res->m_pTexture = new CAULDRON_DX12::Texture();
382
383 CD3DX12_RESOURCE_DESC resourceDesc = {};
384 resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;
385 resourceDesc.Alignment = 0;
386 resourceDesc.Width = width;
387 resourceDesc.Height = height;
388 resourceDesc.DepthOrArraySize = 1;
389 resourceDesc.MipLevels = 1;
390 resourceDesc.SampleDesc.Count = 1;
391 resourceDesc.SampleDesc.Quality = 0;
392 resourceDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET;
393 resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN;
394
395 if (channels == 1)
396 {
397 resourceDesc.Format = DXGI_FORMAT_R16_FLOAT;
398 }
399 else if (channels == 2)
400 {
401 resourceDesc.Format = DXGI_FORMAT_R16G16_FLOAT;
402 }
403 else if (channels == 4)
404 {
405 if (channelSize == 1)
406 resourceDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
407 else
408 resourceDesc.Format = DXGI_FORMAT_R16G16B16A16_FLOAT;
409 }
410
411 if (ClearValues)
412 {
413 D3D12_CLEAR_VALUE ClearParams;
414 ClearParams.Format = resourceDesc.Format;
415 ClearParams.Color[0] = ClearValues->x;
416 ClearParams.Color[1] = ClearValues->y;
417 ClearParams.Color[2] = ClearValues->z;
418 ClearParams.Color[3] = ClearValues->w;
419
420 // Makes initial barriers easier to deal with
421 res->m_pTexture->Init(&m_device, name, &resourceDesc, D3D12_RESOURCE_STATE_COMMON, &ClearParams);
422 }
423 else
424 res->m_pTexture->InitRenderTarget(&m_device, name, &resourceDesc, D3D12_RESOURCE_STATE_RENDER_TARGET);
425
426 res->RTView = new CAULDRON_DX12::RTV();
427 m_resourceViewHeaps.AllocRTVDescriptor(1, res->RTView);
428 res->m_pTexture->CreateRTV(0, res->RTView);
429
430 res->SRView = new CAULDRON_DX12::CBV_SRV_UAV();
431 D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {};
432 srvDesc.Format = resourceDesc.Format;
433 srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;

Callers

nothing calls this directly

Calls 1

CreateSRVMethod · 0.80

Tested by

no test coverage detected