Skip to content

Commit 7889d26

Browse files
committed
Merge branch 'przemog_port' into erfan_merge
2 parents bd1e199 + 6ccf34a commit 7889d26

File tree

12 files changed

+2804
-1669
lines changed

12 files changed

+2804
-1669
lines changed

examples_tests/03.GPU_Mesh/main.cpp

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,11 @@ class GPUMesh : public ApplicationBase
7979
nbl::core::smart_refctd_ptr<nbl::video::IUtilities> utilities;
8080
nbl::core::smart_refctd_ptr<nbl::video::ILogicalDevice> logicalDevice;
8181
nbl::video::IPhysicalDevice* physicalDevice;
82-
std::array<nbl::video::IGPUQueue*, CommonAPI::InitOutput<SC_IMG_COUNT>::EQT_COUNT> queues = { nullptr, nullptr, nullptr, nullptr };
82+
std::array<nbl::video::IGPUQueue*, CommonAPI::InitOutput::MaxQueuesCount> queues = { nullptr, nullptr, nullptr, nullptr };
8383
nbl::core::smart_refctd_ptr<nbl::video::ISwapchain> swapchain;
8484
nbl::core::smart_refctd_ptr<nbl::video::IGPURenderpass> renderpass;
85-
std::array<nbl::core::smart_refctd_ptr<nbl::video::IGPUFramebuffer>, SC_IMG_COUNT> fbos;
86-
nbl::core::smart_refctd_ptr<nbl::video::IGPUCommandPool> commandPool;
85+
std::array<nbl::core::smart_refctd_ptr<nbl::video::IGPUFramebuffer>, CommonAPI::InitOutput::MaxSwapChainImageCount> fbo;
86+
std::array<nbl::core::smart_refctd_ptr<nbl::video::IGPUCommandPool>, CommonAPI::InitOutput::MaxQueuesCount> commandPools;
8787
nbl::core::smart_refctd_ptr<nbl::system::ISystem> system;
8888
nbl::core::smart_refctd_ptr<nbl::asset::IAssetManager> assetManager;
8989
nbl::video::IGPUObjectFromAssetConverter::SParams cpu2gpuParams;
@@ -94,8 +94,8 @@ class GPUMesh : public ApplicationBase
9494
nbl::core::smart_refctd_ptr<video::IGPUFence> gpuComputeFence;
9595
nbl::video::IGPUObjectFromAssetConverter cpu2gpu;
9696

97-
CommonAPI::InputSystem::ChannelReader<IMouseEventChannel> mouse;
98-
CommonAPI::InputSystem::ChannelReader<IKeyboardEventChannel> keyboard;
97+
CommonAPI::InputSystem::ChannelReader<ui::IMouseEventChannel> mouse;
98+
CommonAPI::InputSystem::ChannelReader<ui::IKeyboardEventChannel> keyboard;
9999
Camera camera = Camera(vectorSIMDf(0, 0, 0), vectorSIMDf(0, 0, 0), matrix4SIMD());
100100

101101
int resourceIx = -1;
@@ -123,14 +123,54 @@ class GPUMesh : public ApplicationBase
123123
{
124124
return window.get();
125125
}
126+
video::IAPIConnection* getAPIConnection() override
127+
{
128+
return apiConnection.get();
129+
}
130+
video::ILogicalDevice* getLogicalDevice() override
131+
{
132+
return logicalDevice.get();
133+
}
134+
video::IGPURenderpass* getRenderpass() override
135+
{
136+
return renderpass.get();
137+
}
138+
void setSurface(core::smart_refctd_ptr<video::ISurface>&& s) override
139+
{
140+
surface = std::move(s);
141+
}
142+
void setFBOs(std::vector<core::smart_refctd_ptr<video::IGPUFramebuffer>>& f) override
143+
{
144+
for (int i = 0; i < f.size(); i++)
145+
{
146+
fbo[i] = core::smart_refctd_ptr(f[i]);
147+
}
148+
}
149+
void setSwapchain(core::smart_refctd_ptr<video::ISwapchain>&& s) override
150+
{
151+
swapchain = std::move(s);
152+
}
153+
uint32_t getSwapchainImageCount() override
154+
{
155+
return SC_IMG_COUNT;
156+
}
157+
virtual nbl::asset::E_FORMAT getDepthFormat() override
158+
{
159+
return nbl::asset::EF_D32_SFLOAT;
160+
}
126161

127162
APP_CONSTRUCTOR(GPUMesh)
128163

129164
void onAppInitialized_impl() override
130165
{
131-
CommonAPI::InitOutput<SC_IMG_COUNT> initOutput;
166+
CommonAPI::InitOutput initOutput;
132167
initOutput.window = core::smart_refctd_ptr(window);
133-
CommonAPI::Init<WIN_W, WIN_H, SC_IMG_COUNT>(initOutput, video::EAT_OPENGL, "GPUMesh", nbl::asset::EF_D32_SFLOAT);
168+
initOutput.system = core::smart_refctd_ptr(system);
169+
170+
const auto swapchainImageUsage = static_cast<asset::IImage::E_USAGE_FLAGS>(asset::IImage::EUF_COLOR_ATTACHMENT_BIT);
171+
const video::ISurface::SFormat surfaceFormat(asset::EF_R8G8B8A8_SRGB, asset::ECP_COUNT, asset::EOTF_UNKNOWN);
172+
173+
CommonAPI::InitWithDefaultExt(initOutput, video::EAT_OPENGL_ES, "GPUMesh", WIN_W, WIN_H, SC_IMG_COUNT, swapchainImageUsage, surfaceFormat, nbl::asset::EF_D32_SFLOAT);
134174
window = std::move(initOutput.window);
135175
windowCb = std::move(initOutput.windowCb);
136176
apiConnection = std::move(initOutput.apiConnection);
@@ -141,8 +181,8 @@ class GPUMesh : public ApplicationBase
141181
queues = std::move(initOutput.queues);
142182
swapchain = std::move(initOutput.swapchain);
143183
renderpass = std::move(initOutput.renderpass);
144-
fbos = std::move(initOutput.fbo);
145-
commandPool = std::move(initOutput.commandPool);
184+
fbo = std::move(initOutput.fbo);
185+
commandPools = std::move(initOutput.commandPools);
146186
system = std::move(initOutput.system);
147187
assetManager = std::move(initOutput.assetManager);
148188
cpu2gpuParams = std::move(initOutput.cpu2gpuParams);
@@ -155,7 +195,7 @@ class GPUMesh : public ApplicationBase
155195
matrix4SIMD projectionMatrix = matrix4SIMD::buildProjectionMatrixPerspectiveFovLH(core::radians(60.0f), float(WIN_W) / WIN_H, 0.1, 1000);
156196
camera = Camera(core::vectorSIMDf(-4, 0, 0), core::vectorSIMDf(0, 0, 0), projectionMatrix);
157197

158-
logicalDevice->createCommandBuffers(commandPool.get(), video::IGPUCommandBuffer::EL_PRIMARY, FRAMES_IN_FLIGHT, commandBuffers);
198+
logicalDevice->createCommandBuffers(commandPools[CommonAPI::InitOutput::EQT_GRAPHICS].get(), video::IGPUCommandBuffer::EL_PRIMARY, FRAMES_IN_FLIGHT, commandBuffers);
159199

160200
for (uint32_t i = 0u; i < FRAMES_IN_FLIGHT; i++)
161201
{
@@ -213,8 +253,8 @@ class GPUMesh : public ApplicationBase
213253
inputSystem->getDefaultKeyboard(&keyboard);
214254

215255
camera.beginInputProcessing(nextPresentationTimeStamp);
216-
mouse.consumeEvents([&](const IMouseEventChannel::range_t& events) -> void { camera.mouseProcess(events); }, logger.get());
217-
keyboard.consumeEvents([&](const IKeyboardEventChannel::range_t& events) -> void { camera.keyboardProcess(events); }, logger.get());
256+
mouse.consumeEvents([&](const ui::IMouseEventChannel::range_t& events) -> void { camera.mouseProcess(events); }, logger.get());
257+
keyboard.consumeEvents([&](const ui::IKeyboardEventChannel::range_t& events) -> void { camera.keyboardProcess(events); }, logger.get());
218258
camera.endInputProcessing(nextPresentationTimeStamp);
219259

220260
const auto& mvp = camera.getConcatenatedMatrix();
@@ -246,7 +286,7 @@ class GPUMesh : public ApplicationBase
246286
clear[1].depthStencil.depth = 0.f;
247287

248288
beginInfo.clearValueCount = 2u;
249-
beginInfo.framebuffer = fbos[acquiredNextFBO];
289+
beginInfo.framebuffer = fbo[acquiredNextFBO];
250290
beginInfo.renderpass = renderpass;
251291
beginInfo.renderArea = area;
252292
beginInfo.clearValues = clear;

examples_tests/05.NablaTutorialExample/main.cpp

Lines changed: 62 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ class NablaTutorialExampleApp : public ApplicationBase
5757
nbl::core::smart_refctd_ptr<nbl::video::IUtilities> utilities;
5858
nbl::core::smart_refctd_ptr<nbl::video::ILogicalDevice> logicalDevice;
5959
nbl::video::IPhysicalDevice* physicalDevice;
60-
std::array<nbl::video::IGPUQueue*, CommonAPI::InitOutput<SC_IMG_COUNT>::EQT_COUNT> queues = { nullptr, nullptr, nullptr, nullptr };
60+
std::array<nbl::video::IGPUQueue*, CommonAPI::InitOutput::MaxQueuesCount> queues = { nullptr, nullptr, nullptr, nullptr };
6161
nbl::core::smart_refctd_ptr<nbl::video::ISwapchain> swapchain;
6262
nbl::core::smart_refctd_ptr<nbl::video::IGPURenderpass> renderpass;
63-
std::array<nbl::core::smart_refctd_ptr<nbl::video::IGPUFramebuffer>, SC_IMG_COUNT> fbos;
64-
nbl::core::smart_refctd_ptr<nbl::video::IGPUCommandPool> commandPool; // TODO: Multibuffer and reset the commandpools
63+
std::array<nbl::core::smart_refctd_ptr<nbl::video::IGPUFramebuffer>, CommonAPI::InitOutput::MaxSwapChainImageCount> fbo;
64+
std::array<nbl::core::smart_refctd_ptr<nbl::video::IGPUCommandPool>, CommonAPI::InitOutput::MaxQueuesCount> commandPools; // TODO: Multibuffer and reset the commandpools
6565
nbl::core::smart_refctd_ptr<nbl::system::ISystem> system;
6666
nbl::core::smart_refctd_ptr<nbl::asset::IAssetManager> assetManager;
6767
nbl::video::IGPUObjectFromAssetConverter::SParams cpu2gpuParams;
@@ -84,8 +84,8 @@ class NablaTutorialExampleApp : public ApplicationBase
8484
core::smart_refctd_ptr<video::IGPUSemaphore> renderFinished[FRAMES_IN_FLIGHT] = { nullptr };
8585
core::smart_refctd_ptr<video::IGPUCommandBuffer> commandBuffers[FRAMES_IN_FLIGHT];
8686

87-
CommonAPI::InputSystem::ChannelReader<IMouseEventChannel> mouse;
88-
CommonAPI::InputSystem::ChannelReader<IKeyboardEventChannel> keyboard;
87+
CommonAPI::InputSystem::ChannelReader<ui::IMouseEventChannel> mouse;
88+
CommonAPI::InputSystem::ChannelReader<ui::IKeyboardEventChannel> keyboard;
8989
Camera camera = Camera(vectorSIMDf(0, 0, 0), vectorSIMDf(0, 0, 0), matrix4SIMD());
9090

9191
uint32_t ds1UboBinding = 0;
@@ -120,14 +120,54 @@ class NablaTutorialExampleApp : public ApplicationBase
120120
{
121121
return window.get();
122122
}
123+
video::IAPIConnection* getAPIConnection() override
124+
{
125+
return apiConnection.get();
126+
}
127+
video::ILogicalDevice* getLogicalDevice() override
128+
{
129+
return logicalDevice.get();
130+
}
131+
video::IGPURenderpass* getRenderpass() override
132+
{
133+
return renderpass.get();
134+
}
135+
void setSurface(core::smart_refctd_ptr<video::ISurface>&& s) override
136+
{
137+
surface = std::move(s);
138+
}
139+
void setFBOs(std::vector<core::smart_refctd_ptr<video::IGPUFramebuffer>>& f) override
140+
{
141+
for (int i = 0; i < f.size(); i++)
142+
{
143+
fbo[i] = core::smart_refctd_ptr(f[i]);
144+
}
145+
}
146+
void setSwapchain(core::smart_refctd_ptr<video::ISwapchain>&& s) override
147+
{
148+
swapchain = std::move(s);
149+
}
150+
uint32_t getSwapchainImageCount() override
151+
{
152+
return SC_IMG_COUNT;
153+
}
154+
virtual nbl::asset::E_FORMAT getDepthFormat() override
155+
{
156+
return nbl::asset::EF_D32_SFLOAT;
157+
}
123158

124159
APP_CONSTRUCTOR(NablaTutorialExampleApp)
125160

126161
void onAppInitialized_impl() override
127162
{
128-
CommonAPI::InitOutput<SC_IMG_COUNT> initOutput;
129-
initOutput.window = core::smart_refctd_ptr(window);
130-
CommonAPI::Init<WIN_W, WIN_H, SC_IMG_COUNT>(initOutput, video::EAT_OPENGL, "NablaTutorialExample", nbl::asset::EF_D32_SFLOAT);
163+
CommonAPI::InitOutput initOutput;
164+
initOutput.window = core::smart_refctd_ptr(window);
165+
initOutput.system = core::smart_refctd_ptr(system);
166+
167+
const auto swapchainImageUsage = static_cast<asset::IImage::E_USAGE_FLAGS>(asset::IImage::EUF_COLOR_ATTACHMENT_BIT);
168+
const video::ISurface::SFormat surfaceFormat(asset::EF_R8G8B8A8_SRGB, asset::ECP_COUNT, asset::EOTF_UNKNOWN);
169+
170+
CommonAPI::InitWithDefaultExt(initOutput, video::EAT_OPENGL_ES, "NablaTutorialExample", WIN_W, WIN_H, SC_IMG_COUNT, swapchainImageUsage, surfaceFormat, nbl::asset::EF_D32_SFLOAT);
131171
window = std::move(initOutput.window);
132172
windowCb = std::move(initOutput.windowCb);
133173
apiConnection = std::move(initOutput.apiConnection);
@@ -138,8 +178,8 @@ class NablaTutorialExampleApp : public ApplicationBase
138178
queues = std::move(initOutput.queues);
139179
swapchain = std::move(initOutput.swapchain);
140180
renderpass = std::move(initOutput.renderpass);
141-
fbos = std::move(initOutput.fbo);
142-
commandPool = std::move(initOutput.commandPool);
181+
fbo = std::move(initOutput.fbo);
182+
commandPools = std::move(initOutput.commandPools);
143183
system = std::move(initOutput.system);
144184
assetManager = std::move(initOutput.assetManager);
145185
cpu2gpuParams = std::move(initOutput.cpu2gpuParams);
@@ -149,12 +189,6 @@ class NablaTutorialExampleApp : public ApplicationBase
149189
gpuTransferFence = logicalDevice->createFence(static_cast<video::IGPUFence::E_CREATE_FLAGS>(0));
150190
gpuComputeFence = logicalDevice->createFence(static_cast<video::IGPUFence::E_CREATE_FLAGS>(0));
151191

152-
nbl::video::IGPUObjectFromAssetConverter cpu2gpu;
153-
{
154-
cpu2gpuParams.perQueue[nbl::video::IGPUObjectFromAssetConverter::EQU_TRANSFER].fence = &gpuTransferFence;
155-
cpu2gpuParams.perQueue[nbl::video::IGPUObjectFromAssetConverter::EQU_COMPUTE].fence = &gpuComputeFence;
156-
}
157-
158192
/*
159193
Helpfull class for managing basic geometry objects.
160194
Thanks to it you can get half filled pipeline for your
@@ -181,6 +215,7 @@ class NablaTutorialExampleApp : public ApplicationBase
181215
image view through the driver.
182216
*/
183217

218+
cpu2gpuParams.beginCommandBuffers();
184219
auto gpuImage = cpu2gpu.getGPUObjectsFromAssets(&image_raw, &image_raw + 1, cpu2gpuParams)->front();
185220
cpu2gpuParams.waitForCreationToComplete();
186221
auto& gpuParams = gpuImage->getCreationParameters();
@@ -199,11 +234,10 @@ class NablaTutorialExampleApp : public ApplicationBase
199234
auto cpuVertexShader = core::smart_refctd_ptr_static_cast<ICPUSpecializedShader>(assetManager->findAssets("nbl/builtin/material/lambertian/singletexture/specialized_shader.vert", types)->front().getContents().begin()[0]);
200235
auto cpuFragmentShader = core::smart_refctd_ptr_static_cast<ICPUSpecializedShader>(assetManager->findAssets("nbl/builtin/material/lambertian/singletexture/specialized_shader.frag", types)->front().getContents().begin()[0]);
201236

237+
cpu2gpuParams.beginCommandBuffers();
202238
auto gpuVertexShader = cpu2gpu.getGPUObjectsFromAssets(&cpuVertexShader.get(), &cpuVertexShader.get() + 1, cpu2gpuParams)->front();
203-
cpu2gpuParams.waitForCreationToComplete();
204239
auto gpuFragmentShader = cpu2gpu.getGPUObjectsFromAssets(&cpuFragmentShader.get(), &cpuFragmentShader.get() + 1, cpu2gpuParams)->front();
205240
cpu2gpuParams.waitForCreationToComplete();
206-
cpu2gpuParams.waitForCreationToComplete();
207241
std::array<IGPUSpecializedShader*, 2> gpuShaders = { gpuVertexShader.get(), gpuFragmentShader.get() };
208242

209243
size_t ds0SamplerBinding = 0, ds1UboBinding = 0;
@@ -217,7 +251,7 @@ class NablaTutorialExampleApp : public ApplicationBase
217251
gpuSamplerBinding.binding = ds0SamplerBinding;
218252
gpuSamplerBinding.type = EDT_COMBINED_IMAGE_SAMPLER;
219253
gpuSamplerBinding.count = 1u;
220-
gpuSamplerBinding.stageFlags = static_cast<IGPUSpecializedShader::E_SHADER_STAGE>(IGPUSpecializedShader::ESS_FRAGMENT);
254+
gpuSamplerBinding.stageFlags = static_cast<IGPUShader::E_SHADER_STAGE>(IGPUShader::ESS_FRAGMENT);
221255
gpuSamplerBinding.samplers = nullptr;
222256

223257
/*
@@ -227,7 +261,7 @@ class NablaTutorialExampleApp : public ApplicationBase
227261
IGPUDescriptorSetLayout::SBinding gpuUboBinding;
228262
gpuUboBinding.count = 1u;
229263
gpuUboBinding.binding = ds1UboBinding;
230-
gpuUboBinding.stageFlags = static_cast<asset::ICPUSpecializedShader::E_SHADER_STAGE>(asset::ICPUSpecializedShader::ESS_VERTEX | asset::ICPUSpecializedShader::ESS_FRAGMENT);
264+
gpuUboBinding.stageFlags = static_cast<asset::ICPUShader::E_SHADER_STAGE>(asset::ICPUShader::ESS_VERTEX | asset::ICPUShader::ESS_FRAGMENT);
231265
gpuUboBinding.type = asset::EDT_UNIFORM_BUFFER;
232266

233267
/*
@@ -383,7 +417,7 @@ class NablaTutorialExampleApp : public ApplicationBase
383417
gpuDescriptorSet3 = std::get<4>(gpuRectangle);
384418
gpuGraphicsPipeline = std::get<5>(gpuRectangle);
385419

386-
logicalDevice->createCommandBuffers(commandPool.get(), video::IGPUCommandBuffer::EL_PRIMARY, FRAMES_IN_FLIGHT, commandBuffers);
420+
logicalDevice->createCommandBuffers(commandPools[CommonAPI::InitOutput::EQT_GRAPHICS].get(), video::IGPUCommandBuffer::EL_PRIMARY, FRAMES_IN_FLIGHT, commandBuffers);
387421

388422
for (uint32_t i = 0u; i < FRAMES_IN_FLIGHT; i++)
389423
{
@@ -439,8 +473,8 @@ class NablaTutorialExampleApp : public ApplicationBase
439473
inputSystem->getDefaultKeyboard(&keyboard);
440474

441475
camera.beginInputProcessing(nextPresentationTimeStamp);
442-
mouse.consumeEvents([&](const IMouseEventChannel::range_t& events) -> void { camera.mouseProcess(events); }, logger.get());
443-
keyboard.consumeEvents([&](const IKeyboardEventChannel::range_t& events) -> void { camera.keyboardProcess(events); }, logger.get());
476+
mouse.consumeEvents([&](const ui::IMouseEventChannel::range_t& events) -> void { camera.mouseProcess(events); }, logger.get());
477+
keyboard.consumeEvents([&](const ui::IKeyboardEventChannel::range_t& events) -> void { camera.keyboardProcess(events); }, logger.get());
444478
camera.endInputProcessing(nextPresentationTimeStamp);
445479

446480
const auto& viewMatrix = camera.getViewMatrix();
@@ -473,7 +507,7 @@ class NablaTutorialExampleApp : public ApplicationBase
473507
clear[1].depthStencil.depth = 0.f;
474508

475509
beginInfo.clearValueCount = 2u;
476-
beginInfo.framebuffer = fbos[acquiredNextFBO];
510+
beginInfo.framebuffer = fbo[acquiredNextFBO];
477511
beginInfo.renderpass = renderpass;
478512
beginInfo.renderArea = area;
479513
beginInfo.clearValues = clear;
@@ -511,8 +545,8 @@ class NablaTutorialExampleApp : public ApplicationBase
511545
*/
512546

513547
commandBuffer->bindGraphicsPipeline(gpuGraphicsPipeline.get());
514-
commandBuffer->bindDescriptorSets(asset::EPBP_GRAPHICS, gpuRenderpassIndependentPipeline->getLayout(), 1u, 1u, &gpuDescriptorSet1.get(), nullptr);
515-
commandBuffer->bindDescriptorSets(asset::EPBP_GRAPHICS, gpuRenderpassIndependentPipeline->getLayout(), 3u, 1u, &gpuDescriptorSet3.get(), nullptr);
548+
commandBuffer->bindDescriptorSets(asset::EPBP_GRAPHICS, gpuRenderpassIndependentPipeline->getLayout(), 1u, 1u, &gpuDescriptorSet1.get(), 0u);
549+
commandBuffer->bindDescriptorSets(asset::EPBP_GRAPHICS, gpuRenderpassIndependentPipeline->getLayout(), 3u, 1u, &gpuDescriptorSet3.get(), 0u);
516550

517551
/*
518552
Drawing a mesh (created rectangle) with it's gpu mesh buffer usage.
@@ -523,8 +557,8 @@ class NablaTutorialExampleApp : public ApplicationBase
523557
commandBuffer->endRenderPass();
524558
commandBuffer->end();
525559

526-
CommonAPI::Submit(logicalDevice.get(), swapchain.get(), commandBuffer.get(), queues[CommonAPI::InitOutput<1>::EQT_GRAPHICS], imageAcquire[resourceIx].get(), renderFinished[resourceIx].get(), fence.get());
527-
CommonAPI::Present(logicalDevice.get(), swapchain.get(), queues[CommonAPI::InitOutput<1>::EQT_GRAPHICS], renderFinished[resourceIx].get(), acquiredNextFBO);
560+
CommonAPI::Submit(logicalDevice.get(), swapchain.get(), commandBuffer.get(), queues[CommonAPI::InitOutput::EQT_GRAPHICS], imageAcquire[resourceIx].get(), renderFinished[resourceIx].get(), fence.get());
561+
CommonAPI::Present(logicalDevice.get(), swapchain.get(), queues[CommonAPI::InitOutput::EQT_GRAPHICS], renderFinished[resourceIx].get(), acquiredNextFBO);
528562
}
529563

530564
bool keepRunning() override

0 commit comments

Comments
 (0)