Skip to content

Commit 2d06b28

Browse files
Resolve type for typeless resource
Fixing bug when creating rtvs for typeless resources and remove unused function in RenderingPlugin.cpp
1 parent f639f64 commit 2d06b28

File tree

6 files changed

+88
-6
lines changed

6 files changed

+88
-6
lines changed

PluginSource/source/RenderAPI_D3D12.cpp

Lines changed: 88 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

12391251
void 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+
12781365
void* RenderAPI_D3D12::BeginModifyTexture(void* textureHandle, int textureWidth, int textureHeight, int* outRowPitch)
12791366
{
12801367
wait_for_unity_frame_fence(m_texture_copy_fence);

PluginSource/source/RenderingPlugin.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,6 @@ static void UNITY_INTERFACE_API OnGraphicsDeviceEvent(UnityGfxDeviceEventType ev
9090
static IUnityInterfaces* s_UnityInterfaces = NULL;
9191
static IUnityGraphics* s_Graphics = NULL;
9292

93-
IUnityInterfaces* get_unityintrfaces()
94-
{
95-
return s_UnityInterfaces;
96-
}
97-
9893
extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginLoad(IUnityInterfaces* unityInterfaces)
9994
{
10095
s_UnityInterfaces = unityInterfaces;
512 Bytes
Binary file not shown.
Binary file not shown.
1 KB
Binary file not shown.
512 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)