@@ -399,6 +399,8 @@ class RenderAPI_D3D12 : public RenderAPI
399399 // Wait on any user provided fence
400400 void wait_on_fence (UINT64 fence_value, ID3D12Fence* fence, HANDLE fence_event);
401401
402+ DXGI_FORMAT typeless_fmt_to_typed (DXGI_FORMAT format);
403+
402404 typedef std::vector<D3D12MemoryObject> D3D12Buffers;
403405 typedef std::map<unsigned long long , D3D12Buffers> DeleteQueue;
404406 typedef std::unordered_map<void *, void *> MappedVertexBuffers;
@@ -1233,7 +1235,17 @@ void RenderAPI_D3D12::create_render_texture_rtv(ID3D12DescriptorHeap* heap, ID3D
12331235{
12341236 CD3DX12_CPU_DESCRIPTOR_HANDLE rtv_handle{ heap->GetCPUDescriptorHandleForHeapStart () };
12351237 rtv_handle.Offset (offset, m_texture_rtv_desc_size);
1236- s_d3d12->GetDevice ()->CreateRenderTargetView (target, nullptr , rtv_handle);
1238+
1239+ D3D12_TEX2D_RTV rtv;
1240+ rtv.MipSlice = 0 ;
1241+ rtv.PlaneSlice = 0 ;
1242+
1243+ D3D12_RENDER_TARGET_VIEW_DESC desc;
1244+ desc.Format = typeless_fmt_to_typed (target->GetDesc ().Format );
1245+ desc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;
1246+ desc.Texture2D = rtv;
1247+
1248+ s_d3d12->GetDevice ()->CreateRenderTargetView (target, &desc, rtv_handle);
12371249}
12381250
12391251void RenderAPI_D3D12::transition_barrier (ID3D12GraphicsCommandList* cmd, ID3D12Resource* resource, D3D12_RESOURCE_STATES before, D3D12_RESOURCE_STATES after)
@@ -1275,6 +1287,81 @@ void RenderAPI_D3D12::wait_on_fence(UINT64 fence_value, ID3D12Fence* fence, HAND
12751287 }
12761288}
12771289
1290+ DXGI_FORMAT RenderAPI_D3D12::typeless_fmt_to_typed (DXGI_FORMAT format)
1291+ {
1292+ switch (format)
1293+ {
1294+ case DXGI_FORMAT_R32G32B32A32_TYPELESS:
1295+ return DXGI_FORMAT_R32G32B32A32_UINT;
1296+
1297+ case DXGI_FORMAT_R32G32B32_TYPELESS:
1298+ return DXGI_FORMAT_R32G32B32_UINT;
1299+
1300+ case DXGI_FORMAT_R16G16B16A16_TYPELESS:
1301+ return DXGI_FORMAT_R16G16B16A16_UNORM;
1302+
1303+ case DXGI_FORMAT_R32G32_TYPELESS:
1304+ return DXGI_FORMAT_R32G32_UINT;
1305+
1306+ case DXGI_FORMAT_R32G8X24_TYPELESS:
1307+ return DXGI_FORMAT_X32_TYPELESS_G8X24_UINT;
1308+
1309+ case DXGI_FORMAT_R10G10B10A2_TYPELESS:
1310+ return DXGI_FORMAT_X32_TYPELESS_G8X24_UINT;
1311+
1312+ case DXGI_FORMAT_R8G8B8A8_TYPELESS:
1313+ return DXGI_FORMAT_R8G8B8A8_UNORM;
1314+
1315+ case DXGI_FORMAT_R16G16_TYPELESS:
1316+ return DXGI_FORMAT_R16G16_UNORM;
1317+
1318+ case DXGI_FORMAT_R32_TYPELESS:
1319+ return DXGI_FORMAT_R32_UINT;
1320+
1321+ case DXGI_FORMAT_R24G8_TYPELESS:
1322+ return DXGI_FORMAT_R24_UNORM_X8_TYPELESS;
1323+
1324+ case DXGI_FORMAT_R8G8_TYPELESS:
1325+ return DXGI_FORMAT_R8G8_UNORM;
1326+
1327+ case DXGI_FORMAT_R16_TYPELESS:
1328+ return DXGI_FORMAT_R16_UNORM;
1329+
1330+ case DXGI_FORMAT_R8_TYPELESS:
1331+ return DXGI_FORMAT_R8_UNORM;
1332+
1333+ case DXGI_FORMAT_BC1_TYPELESS:
1334+ return DXGI_FORMAT_BC1_UNORM;
1335+
1336+ case DXGI_FORMAT_BC2_TYPELESS:
1337+ return DXGI_FORMAT_BC2_UNORM;
1338+
1339+ case DXGI_FORMAT_BC3_TYPELESS:
1340+ return DXGI_FORMAT_BC3_UNORM;
1341+
1342+ case DXGI_FORMAT_BC4_TYPELESS:
1343+ return DXGI_FORMAT_BC4_UNORM;
1344+
1345+ case DXGI_FORMAT_BC5_TYPELESS:
1346+ return DXGI_FORMAT_BC5_UNORM;
1347+
1348+ case DXGI_FORMAT_B8G8R8A8_TYPELESS:
1349+ return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
1350+
1351+ case DXGI_FORMAT_B8G8R8X8_TYPELESS:
1352+ return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB;
1353+
1354+ case DXGI_FORMAT_BC6H_TYPELESS:
1355+ return DXGI_FORMAT_BC6H_UF16;
1356+
1357+ case DXGI_FORMAT_BC7_TYPELESS:
1358+ return DXGI_FORMAT_BC7_UNORM;
1359+
1360+ default :
1361+ return format;
1362+ }
1363+ }
1364+
12781365void * RenderAPI_D3D12::BeginModifyTexture (void * textureHandle, int textureWidth, int textureHeight, int * outRowPitch)
12791366{
12801367 wait_for_unity_frame_fence (m_texture_copy_fence);
0 commit comments