@@ -217,8 +217,9 @@ class HnGeometryPool::VertexData final : public GeometryPoolData
217217 const VertexStream& ExistingStream = stream_it.second ;
218218 if (m_Streams.find (SourceName) == m_Streams.end ())
219219 {
220- VERIFY (ExistingStream.Buffer , " ExistingStream.Buffer must not be null for existing data as it is set in the Initialize() method and the data must be initialized." );
221- AddStream (SourceName, ExistingStream.ElementSize , nullptr , ExistingStream.Buffer );
220+ IBuffer* pSrcBuffer = ExistingData->GetBuffer (SourceName);
221+ VERIFY (pSrcBuffer, " pSrcBuffer must not be null for existing data as it must be initialized." );
222+ AddStream (SourceName, ExistingStream.ElementSize , nullptr , pSrcBuffer);
222223 }
223224 }
224225 }
@@ -235,7 +236,11 @@ class HnGeometryPool::VertexData final : public GeometryPoolData
235236 IBuffer* GetBuffer (const pxr::TfToken& Name) const
236237 {
237238 auto it = m_Streams.find (Name);
238- return it != m_Streams.end () ? it->second .Buffer : nullptr ;
239+ if (it == m_Streams.end ())
240+ return nullptr ;
241+
242+ VERIFY_EXPR (!m_PoolAllocation || !it->second .Buffer );
243+ return m_PoolAllocation ? m_PoolAllocation->GetBuffer (it->second .PoolIndex ) : it->second .Buffer ;
239244 }
240245
241246 Uint32 GetNumVertices () const
@@ -280,7 +285,7 @@ class HnGeometryPool::VertexData final : public GeometryPoolData
280285 if (src_stream_it != ExistingData->m_Streams .end ())
281286 {
282287 VERIFY_EXPR (Stream.ElementSize == src_stream_it->second .ElementSize );
283- VERIFY_EXPR (src_stream_it->second .Buffer );
288+ VERIFY_EXPR (m_PoolAllocation || src_stream_it->second .Buffer );
284289 Stream.Buffer = std::move (src_stream_it->second .Buffer );
285290 }
286291 else
@@ -311,28 +316,34 @@ class HnGeometryPool::VertexData final : public GeometryPoolData
311316 continue ;
312317 }
313318
319+ IBuffer* pBuffer = nullptr ;
314320 const Uint32 DataSize = static_cast <Uint32>(m_NumVertices * Stream.ElementSize );
315321 if (m_PoolAllocation)
316322 {
317323 VERIFY (m_PoolAllocation->GetVertexCount () == m_NumVertices, " Unexpected number of vertices in the pool allocation." );
318- Stream. Buffer = m_PoolAllocation->GetBuffer (Stream.PoolIndex );
324+ pBuffer = m_PoolAllocation->GetBuffer (Stream.PoolIndex );
319325 }
320- else if (!Stream. Buffer )
326+ else
321327 {
322- const auto BufferName = m_Name + " - " + StreamName.GetString ();
323- BufferDesc Desc{
324- BufferName.c_str (),
325- DataSize,
326- BIND_VERTEX_BUFFER,
327- USAGE_DEFAULT,
328- };
329- pDevice->CreateBuffer (Desc, nullptr , &Stream.Buffer );
328+ if (!Stream.Buffer )
329+ {
330+ const auto BufferName = m_Name + " - " + StreamName.GetString ();
331+ BufferDesc Desc{
332+ BufferName.c_str (),
333+ DataSize,
334+ BIND_VERTEX_BUFFER,
335+ USAGE_DEFAULT,
336+ };
337+ pDevice->CreateBuffer (Desc, nullptr , &Stream.Buffer );
338+ }
339+ pBuffer = Stream.Buffer ;
330340 }
341+ VERIFY_EXPR (pBuffer != nullptr );
331342
332343 if (const pxr::HdBufferSource* pSource = source_it->second .Source .get ())
333344 {
334345 VERIFY (pSource->GetNumElements () == m_NumVertices, " Unexpected number of elements in vertex data source " , StreamName);
335- pContext->UpdateBuffer (Stream. Buffer , GetStartVertex () * Stream.ElementSize , DataSize, pSource->GetData (), RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
346+ pContext->UpdateBuffer (pBuffer , GetStartVertex () * Stream.ElementSize , DataSize, pSource->GetData (), RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
336347 }
337348 else if (IBuffer* pSrcBuffer = source_it->second .Buffer )
338349 {
@@ -342,15 +353,15 @@ class HnGeometryPool::VertexData final : public GeometryPoolData
342353 pSrcBuffer,
343354 ExistingData->GetStartVertex () * Stream.ElementSize ,
344355 RESOURCE_STATE_TRANSITION_MODE_TRANSITION,
345- Stream. Buffer ,
356+ pBuffer ,
346357 GetStartVertex () * Stream.ElementSize ,
347358 DataSize,
348359 RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
349360 }
350361 else
351362 {
352363 // We have taken the buffer from the existing data - no need to copy
353- VERIFY (Stream. Buffer == pSrcBuffer, " Unexpected buffer for vertex stream '" , StreamName, " '" );
364+ VERIFY (pBuffer == pSrcBuffer, " Unexpected buffer for vertex stream '" , StreamName, " '" );
354365 }
355366 }
356367 else
@@ -628,7 +639,8 @@ class HnGeometryPool::IndexData final : public GeometryPoolData
628639
629640 IBuffer* GetBuffer () const
630641 {
631- return m_Buffer;
642+ VERIFY_EXPR (!m_Suballocation || !m_Buffer);
643+ return m_Suballocation ? m_Suballocation->GetBuffer () : m_Buffer;
632644 }
633645
634646 Uint32 GetStartIndex () const
@@ -687,27 +699,33 @@ class HnGeometryPool::IndexData final : public GeometryPoolData
687699 }
688700 }
689701
702+ IBuffer* pBuffer = nullptr ;
690703 if (m_Suballocation)
691704 {
692- m_Buffer = m_Suballocation->GetBuffer ();
705+ pBuffer = m_Suballocation->GetBuffer ();
693706 VERIFY_EXPR (m_Suballocation->GetSize () == m_StagingData->Size );
694707 }
695- else if (!m_Buffer)
708+ else
696709 {
697- BufferDesc Desc{
698- m_Name.c_str (),
699- m_StagingData->Size ,
700- BIND_INDEX_BUFFER,
701- USAGE_DEFAULT,
702- };
703- pDevice->CreateBuffer (Desc, nullptr , &m_Buffer);
710+ if (!m_Buffer)
711+ {
712+ BufferDesc Desc{
713+ m_Name.c_str (),
714+ m_StagingData->Size ,
715+ BIND_INDEX_BUFFER,
716+ USAGE_DEFAULT,
717+ };
718+ pDevice->CreateBuffer (Desc, nullptr , &m_Buffer);
719+ }
720+ pBuffer = m_Buffer;
704721 }
722+ VERIFY_EXPR (pBuffer != nullptr );
705723
706- pContext->UpdateBuffer (m_Buffer , GetStartIndex () * sizeof (Uint32), m_StagingData->Size , m_StagingData->Ptr , RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
724+ pContext->UpdateBuffer (pBuffer , GetStartIndex () * sizeof (Uint32), m_StagingData->Size , m_StagingData->Ptr , RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
707725
708726 if (!m_Suballocation)
709727 {
710- StateTransitionDesc Barrier{m_Buffer , RESOURCE_STATE_UNKNOWN, RESOURCE_STATE_INDEX_BUFFER, STATE_TRANSITION_FLAG_UPDATE_STATE};
728+ StateTransitionDesc Barrier{pBuffer , RESOURCE_STATE_UNKNOWN, RESOURCE_STATE_INDEX_BUFFER, STATE_TRANSITION_FLAG_UPDATE_STATE};
711729 pContext->TransitionResourceStates (1 , &Barrier);
712730 }
713731
0 commit comments