@@ -12,28 +12,28 @@ CPropertyPoolHandler::CPropertyPoolHandler(core::smart_refctd_ptr<ILogicalDevice
12
12
// TODO: Reuse asset manager from elsewhere?
13
13
auto assetManager = core::make_smart_refctd_ptr<asset::IAssetManager>(core::smart_refctd_ptr<system::ISystem>(system));
14
14
15
- video::IGPUObjectFromAssetConverter CPU2GPU;
16
- video::IGPUObjectFromAssetConverter::SParams cpu2gpuParams;
17
- cpu2gpuParams.assetManager = assetManager.get ();
18
- cpu2gpuParams.device = m_device.get ();
19
-
20
15
auto loadShader = [&](const char * path)
21
- {
22
- asset::IAssetLoader::SAssetLoadParams params = {};
23
- auto shader = core::smart_refctd_ptr_static_cast<asset::ICPUSpecializedShader>(*assetManager->getAsset (path, params).getContents ().begin ());
24
- shader->setSpecializationInfo (asset::ISpecializedShader::SInfo (nullptr , nullptr , " main" ));
25
- assert (shader);
16
+ {
17
+ asset::IAssetLoader::SAssetLoadParams params = {};
18
+ auto assetBundle = assetManager->getAsset (path, params);
19
+ auto assets = assetBundle.getContents ();
20
+ assert (!assets.empty ());
21
+
22
+ auto cpuShader = asset::IAsset::castDown<asset::ICPUShader>(assets[0 ]);
23
+ auto shader = m_device->createShader (cpuShader.get ());
24
+ return shader;
25
+ };
26
+ auto shader = loadShader (" ../../../include/nbl/builtin/hlsl/property_pool/copy.comp.hlsl" );
27
+ const asset::SPushConstantRange baseDWORD = { asset::IShader::ESS_COMPUTE,0u ,sizeof (nbl::hlsl::property_pools::GlobalPushContants) };
28
+ auto layout = m_device->createPipelineLayout ({ &baseDWORD,1u });
26
29
27
- auto gpuShaders = CPU2GPU.getGPUObjectsFromAssets (&shader, &shader + 1u , cpu2gpuParams);
28
- auto gpuShader = gpuShaders->begin ()[0u ];
29
- assert (gpuShader);
30
+ {
31
+ video::IGPUComputePipeline::SCreationParams params = {};
32
+ params.layout = layout.get ();
33
+ params.shader .shader = shader.get ();
30
34
31
- return gpuShader;
32
- };
33
- auto shader = loadShader (" ../../../include/nbl/builtin/hlsl/property_pool/copy.comp.hlsl" );
34
- const asset::SPushConstantRange baseDWORD = {asset::IShader::ESS_COMPUTE,0u ,sizeof (nbl::hlsl::property_pools::GlobalPushContants)};
35
- auto layout = m_device->createPipelineLayout (&baseDWORD,&baseDWORD+1u );
36
- m_pipeline = m_device->createComputePipeline (nullptr ,std::move (layout),std::move (shader));
35
+ m_device->createComputePipelines (nullptr , { ¶ms, 1 }, &m_pipeline);
36
+ }
37
37
38
38
#if 0
39
39
const auto& deviceLimits = m_device->getPhysicalDevice()->getLimits();
@@ -86,7 +86,7 @@ CPropertyPoolHandler::CPropertyPoolHandler(core::smart_refctd_ptr<ILogicalDevice
86
86
87
87
88
88
bool CPropertyPoolHandler::transferProperties (
89
- IGPUCommandBuffer* const cmdbuf, IGPUFence* const fence,
89
+ IGPUCommandBuffer* const cmdbuf, // IGPUFence* const fence,
90
90
const asset::SBufferBinding<video::IGPUBuffer>& scratch, const asset::SBufferBinding<video::IGPUBuffer>& addresses,
91
91
const TransferRequest* const requestsBegin, const TransferRequest* const requestsEnd,
92
92
system::logger_opt_ptr logger, const uint32_t baseDWORD, const uint32_t endDWORD
@@ -112,8 +112,8 @@ bool CPropertyPoolHandler::transferProperties(
112
112
113
113
uint32_t numberOfPasses = totalProps / MaxPropertiesPerDispatch;
114
114
nbl::hlsl::property_pools::TransferRequest transferRequestsData[MaxPropertiesPerDispatch];
115
- uint64_t scratchBufferDeviceAddr = m_device-> getBufferDeviceAddress ( scratch.buffer .get ()) + scratch.offset ;
116
- uint64_t addressBufferDeviceAddr = m_device-> getBufferDeviceAddress ( addresses.buffer .get ()) + addresses.offset ;
115
+ uint64_t scratchBufferDeviceAddr = scratch.buffer .get ()-> getDeviceAddress ( ) + scratch.offset ;
116
+ uint64_t addressBufferDeviceAddr = addresses.buffer .get ()-> getDeviceAddress ( ) + addresses.offset ;
117
117
118
118
for (uint32_t transferPassRequestsIndex = 0 ; transferPassRequestsIndex < totalProps; transferPassRequestsIndex += MaxPropertiesPerDispatch)
119
119
{
@@ -124,8 +124,8 @@ bool CPropertyPoolHandler::transferProperties(
124
124
{
125
125
auto & transferRequest = transferRequestsData[i];
126
126
auto srcRequest = transferPassRequests + i;
127
- transferRequest.srcAddr = m_device-> getBufferDeviceAddress ( srcRequest->memblock .buffer .get ()) + srcRequest->memblock .offset ;
128
- transferRequest.dstAddr = m_device-> getBufferDeviceAddress ( srcRequest->buffer .buffer .get ()) + srcRequest->buffer .offset ;
127
+ transferRequest.srcAddr = srcRequest->memblock .buffer .get ()-> getDeviceAddress ( ) + srcRequest->memblock .offset ;
128
+ transferRequest.dstAddr = srcRequest->buffer .buffer .get ()-> getDeviceAddress ( ) + srcRequest->buffer .offset ;
129
129
transferRequest.srcIndexAddr = srcRequest->srcAddressesOffset ? addressBufferDeviceAddr + srcRequest->srcAddressesOffset : 0 ;
130
130
transferRequest.dstIndexAddr = srcRequest->dstAddressesOffset ? addressBufferDeviceAddr + srcRequest->dstAddressesOffset : 0 ;
131
131
transferRequest.elementCount32 = uint32_t (srcRequest->elementCount & (uint64_t (1 ) << 32 ) - 1 );
@@ -137,7 +137,7 @@ bool CPropertyPoolHandler::transferProperties(
137
137
138
138
maxElements = core::max<uint64_t >(maxElements, srcRequest->elementCount );
139
139
}
140
- cmdbuf->updateBuffer (scratch.buffer . get (),scratch. offset ,sizeof (TransferRequest)* requestsThisPass,transferRequestsData);
140
+ cmdbuf->updateBuffer ({ scratch.offset ,sizeof (TransferRequest) * requestsThisPass, core::smart_refctd_ptr (scratch. buffer ) }, transferRequestsData);
141
141
// TODO: pipeline barrier
142
142
cmdbuf->bindComputePipeline (m_pipeline.get ());
143
143
0 commit comments