@@ -552,7 +552,7 @@ Renderer::InitializationData Renderer::initSceneObjects(const SAssetBundle& mesh
552
552
// make a shortened version of the globalBackendDataDS
553
553
m_rasterInstanceDataDS = m_driver->createGPUDescriptorSet (core::smart_refctd_ptr (m_rasterInstanceDataDSLayout));
554
554
{
555
- IGPUDescriptorSet::SCopyDescriptorSet copy;
555
+ IGPUDescriptorSet::SCopyDescriptorSet copy = {} ;
556
556
copy.dstSet = m_rasterInstanceDataDS.get ();
557
557
copy.srcSet = m_globalBackendDataDS.get ();
558
558
copy.srcBinding = 5u ;
@@ -731,9 +731,6 @@ void Renderer::initSceneResources(SAssetBundle& meshes)
731
731
{
732
732
// i know what I'm doing
733
733
auto globalBackendDataDSLayout = core::smart_refctd_ptr<IGPUDescriptorSetLayout>(const_cast <IGPUDescriptorSetLayout*>(m_globalBackendDataDS->getLayout ()));
734
-
735
- for (auto i=0u ; i<2u ; i++)
736
- m_commonRaytracingDS[i] = m_driver->createGPUDescriptorSet (core::smart_refctd_ptr (m_commonRaytracingDSLayout));
737
734
738
735
// cull
739
736
{
@@ -764,9 +761,6 @@ void Renderer::initSceneResources(SAssetBundle& meshes)
764
761
core::smart_refctd_ptr (m_commonRaytracingDSLayout),
765
762
core::smart_refctd_ptr (m_closestHitDSLayout)
766
763
);
767
-
768
- for (auto i=0u ; i<2u ; i++)
769
- m_closestHitDS[i] = m_driver->createGPUDescriptorSet (core::smart_refctd_ptr (m_closestHitDSLayout));
770
764
}
771
765
772
766
// resolve
@@ -842,9 +836,7 @@ void Renderer::deinitSceneResources()
842
836
glFinish ();
843
837
844
838
m_resolveDS = nullptr ;
845
- m_closestHitDS[0 ] = m_closestHitDS[1 ] = nullptr ;
846
839
m_raygenDS = nullptr ;
847
- m_commonRaytracingDS[0 ] = m_commonRaytracingDS[1 ] = nullptr ;
848
840
m_additionalGlobalDS = nullptr ;
849
841
m_rasterInstanceDataDS = nullptr ;
850
842
m_globalBackendDataDS = nullptr ;
@@ -1059,6 +1051,9 @@ void Renderer::initScreenSizedResources(uint32_t width, uint32_t height, core::s
1059
1051
setImageInfo (infos+3 ,asset::EIL_GENERAL,core::smart_refctd_ptr (m_accumulation));
1060
1052
createEmptyInteropBufferAndSetUpInfo (infos+4 ,m_rayBuffer[0 ],raygenBufferSize);
1061
1053
setBufferInfo (infos+5 ,m_rayCountBuffer);
1054
+
1055
+ for (auto i=0u ; i<2u ; i++)
1056
+ m_commonRaytracingDS[i] = m_driver->createGPUDescriptorSet (core::smart_refctd_ptr (m_commonRaytracingDSLayout));
1062
1057
1063
1058
constexpr auto descriptorUpdateCount = 6u ;
1064
1059
setDstSetAndDescTypesOnWrites (m_commonRaytracingDS[0 ].get (),writes,infos,{
@@ -1094,6 +1089,8 @@ void Renderer::initScreenSizedResources(uint32_t width, uint32_t height, core::s
1094
1089
infos[0u ].buffer .offset = 0u ;
1095
1090
infos[0u ].buffer .size = m_rayBuffer[other].buffer ->getSize ();
1096
1091
createEmptyInteropBufferAndSetUpInfo (infos+1 ,m_intersectionBuffer[other],intersectionBufferSize);
1092
+
1093
+ m_closestHitDS[i] = m_driver->createGPUDescriptorSet (core::smart_refctd_ptr (m_closestHitDSLayout));
1097
1094
1098
1095
setDstSetAndDescTypesOnWrites (m_closestHitDS[i].get (),writes,infos,{EDT_STORAGE_BUFFER,EDT_STORAGE_BUFFER});
1099
1096
m_driver->updateDescriptorSets (2u ,writes,0u ,nullptr );
@@ -1203,6 +1200,11 @@ void Renderer::deinitScreenSizedResources()
1203
1200
m_denoiserInputs[EDI_NORMAL] = {};
1204
1201
m_denoiserOutput = {};
1205
1202
#endif
1203
+
1204
+ // make sure descriptor sets dont dangle
1205
+ // m_driver->bindDescriptorSets(video::EPBP_COMPUTE,nullptr,0u,4u,nullptr);
1206
+ m_closestHitDS[0 ] = m_closestHitDS[1 ] = nullptr ;
1207
+ m_commonRaytracingDS[0 ] = m_commonRaytracingDS[1 ] = nullptr ;
1206
1208
1207
1209
// unset the framebuffer (dangling smartpointer in state cache can prevent the framebuffer from being dropped until the next framebuffer set)
1208
1210
m_driver->setRenderTarget (nullptr ,false );
@@ -1217,6 +1219,7 @@ void Renderer::deinitScreenSizedResources()
1217
1219
m_colorBuffer = nullptr ;
1218
1220
}
1219
1221
m_accumulation = m_tonemapOutput = nullptr ;
1222
+ glFinish ();
1220
1223
1221
1224
// wait for OpenCL to finish
1222
1225
ocl::COpenCLHandler::ocl.pclFlush (commandQueue);
@@ -1225,8 +1228,7 @@ void Renderer::deinitScreenSizedResources()
1225
1228
{
1226
1229
auto deleteInteropBuffer = [&](InteropBuffer& buffer) -> void
1227
1230
{
1228
- if (buffer.asRRBuffer .first )
1229
- m_rrManager->deleteRRBuffer (buffer.asRRBuffer .first );
1231
+ m_rrManager->unlinkBuffer (std::move (buffer.asRRBuffer ));
1230
1232
buffer = {};
1231
1233
};
1232
1234
deleteInteropBuffer (m_intersectionBuffer[i]);
0 commit comments