@@ -82,27 +82,58 @@ bool IGPUDescriptorSet::processWrite(const IGPUDescriptorSet::SWriteDescriptorSe
8282
8383bool IGPUDescriptorSet::processCopy (const IGPUDescriptorSet::SCopyDescriptorSet& copy)
8484{
85- #if 0
8685 assert (copy.dstSet == this );
8786
87+ system::ILogger* logger = nullptr ;
88+ {
89+ auto debugCallback = getOriginDevice ()->getPhysicalDevice ()->getDebugCallback ();
90+ if (debugCallback)
91+ logger = debugCallback->getLogger ();
92+ }
93+
8894 for (uint32_t t = 0 ; t < static_cast <uint32_t >(asset::IDescriptor::E_TYPE::ET_COUNT); ++t)
8995 {
9096 const auto type = static_cast <asset::IDescriptor::E_TYPE>(t);
9197
92- auto* srcDescriptors = srcDS->getDescriptors(type, pDescriptorCopies[i].srcBinding);
93- auto* srcSamplers = srcDS->getMutableSamplers(pDescriptorCopies[i].srcBinding);
98+ auto * srcDescriptors = copy.srcSet ->getDescriptors (type, copy.srcBinding );
99+ if (!srcDescriptors)
100+ {
101+ if (logger)
102+ logger->log (" Expected descriptors of given type at binding %u for the src descriptor set but none found." , system::ILogger::ELL_ERROR, copy.srcBinding );
103+ return false ;
104+ }
105+
106+ auto * srcSamplers = copy.srcSet ->getMutableSamplers (copy.srcBinding );
107+ if (!srcSamplers)
108+ {
109+ if (logger)
110+ logger->log (" Expected mutable samplers at binding %u for the src descriptor set, but none found" , system::ILogger::ELL_ERROR, copy.srcBinding );
111+ return false ;
112+ }
94113
95- auto* dstDescriptors = dstDS->getDescriptors(type, pDescriptorCopies[i].dstBinding);
96- auto* dstSamplers = dstDS->getMutableSamplers(pDescriptorCopies[i].dstBinding);
114+ auto * dstDescriptors = copy.dstSet ->getDescriptors (type, copy.dstBinding );
115+ if (!dstDescriptors)
116+ {
117+ if (logger)
118+ logger->log (" Expected descriptors of given type at binding %u for the dst descriptor set but none found." , system::ILogger::ELL_ERROR, copy.dstBinding );
119+ return false ;
120+ }
97121
98- if (srcDescriptors && dstDescriptors)
99- std::copy_n(srcDescriptors, pDescriptorCopies[i].count, dstDescriptors);
122+ auto * dstSamplers = copy.dstSet ->getMutableSamplers (copy.dstBinding );
123+ if (!dstSamplers)
124+ {
125+ if (logger)
126+ logger->log (" Expected mutable samplers at binding %u for the dst descriptor set, but none found" , system::ILogger::ELL_ERROR, copy.dstBinding );
127+ return false ;
128+ }
100129
101- if (srcSamplers && dstSamplers)
102- std::copy_n(srcSamplers, pDescriptorCopies[i] .count, dstSamplers);
130+ std::copy_n (srcDescriptors, copy. count , dstDescriptors);
131+ std::copy_n (srcSamplers, copy .count , dstSamplers);
103132 }
104- #endif
105- return false ;
133+
134+ incrementVersion ();
135+
136+ return true ;
106137}
107138
108139}
0 commit comments