@@ -20,7 +20,7 @@ class ISkinInstanceCacheManager : public virtual core::IReferenceCounted
20
20
{
21
21
public:
22
22
// creation
23
- static inline core::smart_refctd_ptr<ISkinInstanceCacheManager> create (video::IUtilities* utils, video::IGPUQueue* uploadQueue)
23
+ static inline core::smart_refctd_ptr<ISkinInstanceCacheManager> create (video::IUtilities* utils, video::IGPUQueue* uploadQueue, ITransformTreeManager* ttm )
24
24
{
25
25
auto device = utils->getLogicalDevice ();
26
26
auto system = device->getPhysicalDevice ()->getSystem ();
@@ -49,39 +49,6 @@ class ISkinInstanceCacheManager : public virtual core::IReferenceCounted
49
49
if (!initTimestampValue)
50
50
return nullptr ;
51
51
initTimestampValue->setObjectDebugName (" ISkinInstanceCacheManager::m_initTimestampValue" );
52
-
53
- tmp.resize (sizeof (uint16_t )*IndexCount);
54
- uint16_t * debugIndices = reinterpret_cast <uint16_t *>(tmp.data ());
55
- {
56
- std::fill_n (debugIndices,24u ,0u );
57
- debugIndices[0 ] = 0b000 ;
58
- debugIndices[1 ] = 0b001 ;
59
- debugIndices[2 ] = 0b001 ;
60
- debugIndices[3 ] = 0b011 ;
61
- debugIndices[4 ] = 0b011 ;
62
- debugIndices[5 ] = 0b010 ;
63
- debugIndices[6 ] = 0b010 ;
64
- debugIndices[7 ] = 0b000 ;
65
- debugIndices[8 ] = 0b000 ;
66
- debugIndices[9 ] = 0b100 ;
67
- debugIndices[10 ] = 0b001 ;
68
- debugIndices[11 ] = 0b101 ;
69
- debugIndices[12 ] = 0b010 ;
70
- debugIndices[13 ] = 0b110 ;
71
- debugIndices[14 ] = 0b011 ;
72
- debugIndices[15 ] = 0b111 ;
73
- debugIndices[16 ] = 0b100 ;
74
- debugIndices[17 ] = 0b101 ;
75
- debugIndices[18 ] = 0b101 ;
76
- debugIndices[19 ] = 0b111 ;
77
- debugIndices[20 ] = 0b100 ;
78
- debugIndices[21 ] = 0b110 ;
79
- debugIndices[22 ] = 0b110 ;
80
- debugIndices[23 ] = 0b111 ;
81
- }
82
- auto debugIndexBuffer = utils->createFilledDeviceLocalGPUBufferOnDedMem (uploadQueue,tmp.size (),debugIndices);
83
- if (!debugIndexBuffer)
84
- return nullptr ;
85
52
86
53
auto cacheDsLayout = ISkinInstanceCache::createCacheDescriptorSetLayout (device);
87
54
auto cacheUpdateDsLayout = createCacheUpdateDescriptorSetLayout (device);
@@ -115,9 +82,8 @@ class ISkinInstanceCacheManager : public virtual core::IReferenceCounted
115
82
return nullptr ;
116
83
117
84
auto * sicm = new ISkinInstanceCacheManager (
118
- core::smart_refctd_ptr<video::ILogicalDevice>(device),
119
- std::move (cacheUpdatePipeline),std::move (debugDrawIndepenedentPipeline),
120
- std::move (initTimestampValue),std::move (debugIndexBuffer)
85
+ core::smart_refctd_ptr<video::ILogicalDevice>(device),ttm,
86
+ std::move (cacheUpdatePipeline),std::move (debugDrawIndepenedentPipeline),std::move (initTimestampValue)
121
87
);
122
88
return core::smart_refctd_ptr<ISkinInstanceCacheManager>(sicm,core::dont_grab);
123
89
}
@@ -446,7 +412,7 @@ class ISkinInstanceCacheManager : public virtual core::IReferenceCounted
446
412
}
447
413
448
414
//
449
- static inline constexpr uint32_t DebugDrawDescriptorBindingCount = 3u ;
415
+ static inline constexpr uint32_t DebugDrawDescriptorBindingCount = 4u ;
450
416
static inline core::smart_refctd_ptr<video::IGPUDescriptorSetLayout> createDebugDrawDescriptorSetLayout (video::ILogicalDevice* device, asset::ISpecializedShader::E_SHADER_STAGE* stageAccessFlags=nullptr )
451
417
{
452
418
video::IGPUDescriptorSetLayout::SBinding bindings[DebugDrawDescriptorBindingCount];
@@ -462,9 +428,10 @@ class ISkinInstanceCacheManager : public virtual core::IReferenceCounted
462
428
};
463
429
static inline void updateDebugDrawDescriptorSet (
464
430
video::ILogicalDevice* device, video::IGPUDescriptorSet* debugDrawDS,
431
+ const scene::ITransformTree* transformTree,
432
+ asset::SBufferBinding<video::IGPUBuffer>&& aabbPool,
465
433
asset::SBufferBinding<video::IGPUBuffer>&& skinInstanceDebugData,
466
- asset::SBufferBinding<video::IGPUBuffer>&& skinInstanceJointCountInclPrefixSum,
467
- asset::SBufferBinding<video::IGPUBuffer>&& aabbPool
434
+ asset::SBufferBinding<video::IGPUBuffer>&& skinInstanceJointCountInclPrefixSum
468
435
)
469
436
{
470
437
video::IGPUDescriptorSet::SWriteDescriptorSet writes[DebugDrawDescriptorBindingCount];
@@ -478,9 +445,10 @@ class ISkinInstanceCacheManager : public virtual core::IReferenceCounted
478
445
writes[i].descriptorType = asset::EDT_STORAGE_BUFFER;
479
446
writes[i].info = infos+i;
480
447
}
481
- infos[0 ] = skinInstanceDebugData;
482
- infos[1 ] = skinInstanceJointCountInclPrefixSum;
483
- infos[2 ] = aabbPool;
448
+ infos[0 ] = transformTree->getNodePropertyPool ()->getPropertyMemoryBlock (scene::ITransformTree::parent_prop_ix);
449
+ infos[1 ] = aabbPool;
450
+ infos[2 ] = skinInstanceDebugData;
451
+ infos[3 ] = skinInstanceJointCountInclPrefixSum;
484
452
device->updateDescriptorSets (DebugDrawDescriptorBindingCount,writes,0u ,nullptr );
485
453
}
486
454
struct DebugPushConstants
@@ -503,7 +471,7 @@ class ISkinInstanceCacheManager : public virtual core::IReferenceCounted
503
471
cmdbuf->bindGraphicsPipeline (pipeline);
504
472
cmdbuf->bindIndexBuffer (m_debugIndexBuffer.get (),0u ,asset::EIT_16BIT);
505
473
cmdbuf->pushConstants (layout,asset::ISpecializedShader::ESS_VERTEX,0u ,sizeof (DebugPushConstants),&pushConstants);
506
- cmdbuf->drawIndexed (IndexCount ,totalJointCount,0u ,0u ,0u );
474
+ cmdbuf->drawIndexed (ITransformTreeManager::DebugIndexCount ,totalJointCount,0u ,0u ,0u );
507
475
}
508
476
509
477
//
@@ -530,14 +498,14 @@ class ISkinInstanceCacheManager : public virtual core::IReferenceCounted
530
498
protected:
531
499
ISkinInstanceCacheManager (
532
500
core::smart_refctd_ptr<video::ILogicalDevice>&& _device,
501
+ const ITransformTreeManager* ttm,
533
502
core::smart_refctd_ptr<video::IGPUComputePipeline>&& _cacheUpdate,
534
503
core::smart_refctd_ptr<video::IGPURenderpassIndependentPipeline>&& _debugDrawRenderpassIndependent,
535
- core::smart_refctd_ptr<video::IGPUBuffer>&& _initialTimestampBuffer,
536
- core::smart_refctd_ptr<video::IGPUBuffer>&& _debugIndexBuffer
504
+ core::smart_refctd_ptr<video::IGPUBuffer>&& _initialTimestampBuffer
537
505
) : m_device(std::move(_device)), m_cacheUpdate(std::move(_cacheUpdate)),
538
506
m_debugDrawRenderpassIndependent (std::move(_debugDrawRenderpassIndependent)),
539
507
m_initialTimestampBuffer(std::move(_initialTimestampBuffer)),
540
- m_debugIndexBuffer(std::move(_debugIndexBuffer )),
508
+ m_debugIndexBuffer(ttm-> getDebugIndexBuffer ( )),
541
509
m_workgroupSize(m_device->getPhysicalDevice ()->getLimits().maxOptimallyResidentWorkgroupInvocations)
542
510
{
543
511
}
@@ -552,8 +520,7 @@ class ISkinInstanceCacheManager : public virtual core::IReferenceCounted
552
520
const uint32_t m_workgroupSize;
553
521
554
522
core::smart_refctd_ptr<video::IGPURenderpassIndependentPipeline> m_debugDrawRenderpassIndependent;
555
- core::smart_refctd_ptr<video::IGPUBuffer> m_debugIndexBuffer;
556
- constexpr static inline auto IndexCount = 24u ;
523
+ core::smart_refctd_ptr<const video::IGPUBuffer> m_debugIndexBuffer;
557
524
};
558
525
559
526
} // end namespace nbl::scene
0 commit comments