Skip to content

Commit 3bcded9

Browse files
committed
Merge branch 'master' of github.com:Devsh-Graphics-Programming/Nabla
2 parents cfba474 + 06b8b63 commit 3bcded9

File tree

78 files changed

+1474
-1300
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

78 files changed

+1474
-1300
lines changed

cmake/common.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ macro(nbl_create_executable_project _EXTRA_SOURCES _EXTRA_OPTIONS _EXTRA_INCLUDE
4040
add_library(${EXECUTABLE_NAME} SHARED main.cpp ${_EXTRA_SOURCES})
4141
else()
4242
set(NBL_EXECUTABLE_SOURCES
43+
${NBL_ROOT_PATH}/examples_tests/common/CommonAPI.cpp
4344
main.cpp
4445
${_EXTRA_SOURCES}
4546
)

include/nbl/asset/ECommonEnums.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,6 @@ enum E_DEPENDENCY_FLAGS
107107
EDF_DEVICE_GROUP_BIT = 0x04
108108
};
109109

110-
enum E_SHARING_MODE : uint8_t
111-
{
112-
ESM_EXCLUSIVE = 0,
113-
ESM_CONCURRENT = 1
114-
};
115-
116110
}
117111

118112
#endif

include/nbl/asset/EImageLayout.h

Lines changed: 0 additions & 35 deletions
This file was deleted.

include/nbl/asset/IBuffer.h

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
// Copyright (C) 2018-2020 - DevSH Graphics Programming Sp. z O.O.
1+
// Copyright (C) 2018-2022 - DevSH Graphics Programming Sp. z O.O.
22
// This file is part of the "Nabla Engine".
33
// For conditions of distribution and use, see copyright notice in nabla.h
4-
54
#ifndef _NBL_ASSET_I_BUFFER_H_INCLUDED_
65
#define _NBL_ASSET_I_BUFFER_H_INCLUDED_
76

@@ -16,8 +15,9 @@ namespace nbl::asset
1615
class NBL_API IBuffer : public core::IBuffer, public IDescriptor
1716
{
1817
public:
19-
E_CATEGORY getTypeCategory() const override { return EC_BUFFER; }
18+
E_CATEGORY getTypeCategory() const override {return EC_BUFFER;}
2019

20+
//!
2121
enum E_USAGE_FLAGS : uint32_t
2222
{
2323
EUF_NONE = 0x00000000,
@@ -37,11 +37,29 @@ class NBL_API IBuffer : public core::IBuffer, public IDescriptor
3737
EUF_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT = 0x00080000,
3838
EUF_ACCELERATION_STRUCTURE_STORAGE_BIT = 0x00100000,
3939
EUF_SHADER_BINDING_TABLE_BIT = 0x00000400,
40+
//! synthetic Nabla inventions
41+
// whether `IGPUCommandBuffer::updateBuffer` can be used on this buffer
42+
EUF_INLINE_UPDATE_VIA_CMDBUF = 0x80000000u,
4043
};
4144

45+
//!
46+
struct SCreationParams
47+
{
48+
size_t size = 0ull;
49+
core::bitflag<E_USAGE_FLAGS> usage = EUF_NONE;
50+
};
51+
52+
//!
53+
inline const SCreationParams& getCreationParams() const {return m_creationParams;}
54+
55+
//! Returns size in bytes.
56+
uint64_t getSize() const override { return m_creationParams.size; }
57+
4258
protected:
43-
IBuffer() = default;
59+
IBuffer(const SCreationParams& _creationParams) : m_creationParams(_creationParams) {}
4460
virtual ~IBuffer() = default;
61+
62+
SCreationParams m_creationParams;
4563
};
4664

4765
template<class BufferType>

include/nbl/asset/ICPUBuffer.h

Lines changed: 13 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -33,26 +33,25 @@ class NBL_API ICPUBuffer : public asset::IBuffer, public asset::IAsset
3333
}
3434

3535
//! Non-allocating constructor for CCustormAllocatorCPUBuffer derivative
36-
ICPUBuffer(size_t sizeInBytes, void* dat) : size(dat ? sizeInBytes : 0), data(dat), usage(EUF_TRANSFER_DST_BIT)
37-
{}
36+
ICPUBuffer(size_t sizeInBytes, void* dat) : asset::IBuffer({dat ? sizeInBytes:0,EUF_TRANSFER_DST_BIT}), data(dat) {}
3837
public:
39-
//! Constructor.
38+
//! Constructor. TODO: remove, alloc can fail, should be a static create method instead!
4039
/** @param sizeInBytes Size in bytes. If `dat` argument is present, it denotes size of data pointed by `dat`, otherwise - size of data to be allocated.
4140
*/
42-
ICPUBuffer(size_t sizeInBytes) : size(0), usage(EUF_TRANSFER_DST_BIT)
41+
ICPUBuffer(size_t sizeInBytes) : asset::IBuffer({0,EUF_TRANSFER_DST_BIT})
4342
{
4443
data = _NBL_ALIGNED_MALLOC(sizeInBytes,_NBL_SIMD_ALIGNMENT);
4544
if (!data)
4645
return;
4746

48-
size = sizeInBytes;
47+
m_creationParams.size = sizeInBytes;
4948
}
5049

5150
core::smart_refctd_ptr<IAsset> clone(uint32_t = ~0u) const override
5251
{
53-
auto cp = core::make_smart_refctd_ptr<ICPUBuffer>(size);
52+
auto cp = core::make_smart_refctd_ptr<ICPUBuffer>(m_creationParams.size);
5453
clone_common(cp.get());
55-
memcpy(cp->getPointer(), data, size);
54+
memcpy(cp->getPointer(), data, m_creationParams.size);
5655

5756
return cp;
5857
}
@@ -66,7 +65,7 @@ class NBL_API ICPUBuffer : public asset::IBuffer, public asset::IAsset
6665
if (data)
6766
_NBL_ALIGNED_FREE(data);
6867
data = nullptr;
69-
size = 0ull;
68+
m_creationParams.size = 0ull;
7069
isDummyObjectForCacheAliasing = true;
7170
}
7271

@@ -75,9 +74,6 @@ class NBL_API ICPUBuffer : public asset::IBuffer, public asset::IAsset
7574

7675
virtual size_t conservativeSizeEstimate() const override { return getSize(); }
7776

78-
//! Returns size in bytes.
79-
virtual uint64_t getSize() const override {return size;}
80-
8177
//! Returns pointer to data.
8278
virtual const void* getPointer() const {return data;}
8379
virtual void* getPointer()
@@ -89,34 +85,25 @@ class NBL_API ICPUBuffer : public asset::IBuffer, public asset::IAsset
8985
bool canBeRestoredFrom(const IAsset* _other) const override
9086
{
9187
auto* other = static_cast<const ICPUBuffer*>(_other);
92-
if (size != other->size)
88+
if (m_creationParams.size != other->m_creationParams.size)
9389
return false;
94-
9590
return true;
9691
}
9792

9893
inline core::bitflag<E_USAGE_FLAGS> getUsageFlags() const
9994
{
100-
return usage;
95+
return m_creationParams.usage;
10196
}
10297
inline bool setUsageFlags(core::bitflag<E_USAGE_FLAGS> _usage)
10398
{
10499
assert(!isImmutable_debug());
105-
usage = _usage;
100+
m_creationParams.usage = _usage;
106101
return true;
107102
}
108103
inline bool addUsageFlags(core::bitflag<E_USAGE_FLAGS> _usage)
109104
{
110105
assert(!isImmutable_debug());
111-
usage |= _usage;
112-
return true;
113-
}
114-
115-
inline bool getCanUpdateSubRange() const {return canUpdateSubRange;}
116-
inline bool setCanUpdateSubRange(const bool _canUpdateSubRange)
117-
{
118-
assert(!isImmutable_debug());
119-
canUpdateSubRange = _canUpdateSubRange;
106+
m_creationParams.usage |= _usage;
120107
return true;
121108
}
122109

@@ -129,13 +116,7 @@ class NBL_API ICPUBuffer : public asset::IBuffer, public asset::IAsset
129116
std::swap(data, other->data);
130117
}
131118

132-
uint64_t size;
133119
void* data;
134-
// this is a bit weird, but makes sense because the usages are for the IGPUBuffer that will be created from the data stored here
135-
core::bitflag<E_USAGE_FLAGS> usage = EUF_TRANSFER_DST_BIT;
136-
// whether `IGPUCommandBuffer::updateBuffer` can be used
137-
// TODO: in the new CPU2GPU converter make sure to ||= this value for all buffers
138-
bool canUpdateSubRange = false;
139120
};
140121

141122
template<
@@ -197,9 +178,10 @@ class NBL_API CCustomAllocatorCPUBuffer<Allocator, false> : public CCustomAlloca
197178
public:
198179
using Base::Base;
199180

181+
// TODO: remove, alloc can fail, should be a static create method instead!
200182
CCustomAllocatorCPUBuffer(size_t sizeInBytes, const void* dat, Allocator&& alctr = Allocator()) : Base(sizeInBytes, alctr.allocate(sizeInBytes), core::adopt_memory, std::move(alctr))
201183
{
202-
memcpy(Base::data, dat, sizeInBytes);
184+
memcpy(Base::data,dat,sizeInBytes);
203185
}
204186
};
205187

include/nbl/asset/ICPUImage.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,17 @@ namespace asset
2020
class NBL_API ICPUImage final : public IImage, public IAsset
2121
{
2222
public:
23-
inline static core::smart_refctd_ptr<ICPUImage> create(SCreationParams&& _params)
23+
inline static core::smart_refctd_ptr<ICPUImage> create(const SCreationParams& _params)
2424
{
2525
if (!validateCreationParameters(_params))
2626
return nullptr;
2727

28-
return core::smart_refctd_ptr<ICPUImage>(new ICPUImage(std::move(_params)), core::dont_grab);
28+
return core::smart_refctd_ptr<ICPUImage>(new ICPUImage(_params), core::dont_grab);
2929
}
3030

3131
core::smart_refctd_ptr<IAsset> clone(uint32_t _depth = ~0u) const override
3232
{
33-
auto par = params;
33+
auto par = m_creationParams;
3434
auto cp = core::smart_refctd_ptr<ICPUImage>(new ICPUImage(std::move(par)), core::dont_grab);
3535
clone_common(cp.get());
3636

@@ -187,22 +187,22 @@ class NBL_API ICPUImage final : public IImage, public IAsset
187187

188188
inline core::bitflag<E_USAGE_FLAGS> getImageUsageFlags() const
189189
{
190-
return params.usage;
190+
return m_creationParams.usage;
191191
}
192192

193193
inline bool setImageUsageFlags(core::bitflag<E_USAGE_FLAGS> usage)
194194
{
195195
if(isImmutable_debug())
196-
return ((params.usage & usage).value == usage.value);
197-
params.usage = usage;
196+
return ((m_creationParams.usage & usage).value == usage.value);
197+
m_creationParams.usage = usage;
198198
return true;
199199
}
200200

201201
inline bool addImageUsageFlags(core::bitflag<E_USAGE_FLAGS> usage)
202202
{
203203
if(isImmutable_debug())
204-
return ((params.usage & usage).value == usage.value);
205-
params.usage |= usage;
204+
return ((m_creationParams.usage & usage).value == usage.value);
205+
m_creationParams.usage |= usage;
206206
return true;
207207
}
208208

@@ -211,7 +211,7 @@ class NBL_API ICPUImage final : public IImage, public IAsset
211211
auto* other = static_cast<const ICPUImage*>(_other);
212212
if (info != other->info)
213213
return false;
214-
if (params != other->params)
214+
if (m_creationParams != other->m_creationParams)
215215
return false;
216216
if (!buffer->canBeRestoredFrom(other->buffer.get()))
217217
return false;
@@ -239,7 +239,7 @@ class NBL_API ICPUImage final : public IImage, public IAsset
239239
return buffer->isAnyDependencyDummy(_levelsBelow);
240240
}
241241

242-
ICPUImage(SCreationParams&& _params) : IImage(std::move(_params))
242+
ICPUImage(const SCreationParams& _params) : IImage(_params)
243243
{
244244
}
245245

include/nbl/asset/ICommandBuffer.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,8 @@ class NBL_API ICommandBuffer
171171
struct SImageMemoryBarrier
172172
{
173173
SMemoryBarrier barrier;
174-
asset::E_IMAGE_LAYOUT oldLayout;
175-
asset::E_IMAGE_LAYOUT newLayout;
174+
asset::IImage::E_LAYOUT oldLayout;
175+
asset::IImage::E_LAYOUT newLayout;
176176
uint32_t srcQueueFamilyIndex;
177177
uint32_t dstQueueFamilyIndex;
178178
core::smart_refctd_ptr<const image_t> image;
@@ -261,10 +261,10 @@ class NBL_API ICommandBuffer
261261
virtual bool setBlendConstants(const float blendConstants[4]) = 0;
262262

263263
virtual bool copyBuffer(const buffer_t* srcBuffer, buffer_t* dstBuffer, uint32_t regionCount, const SBufferCopy* pRegions) = 0;
264-
virtual bool copyImage(const image_t* srcImage, asset::E_IMAGE_LAYOUT srcImageLayout, image_t* dstImage, asset::E_IMAGE_LAYOUT dstImageLayout, uint32_t regionCount, const asset::IImage::SImageCopy* pRegions) = 0;
265-
virtual bool copyBufferToImage(const buffer_t* srcBuffer, image_t* dstImage, asset::E_IMAGE_LAYOUT dstImageLayout, uint32_t regionCount, const asset::IImage::SBufferCopy* pRegions) = 0;
266-
virtual bool copyImageToBuffer(const image_t* srcImage, asset::E_IMAGE_LAYOUT srcImageLayout, buffer_t* dstBuffer, uint32_t regionCount, const asset::IImage::SBufferCopy* pRegions) = 0;
267-
virtual bool blitImage(const image_t* srcImage, asset::E_IMAGE_LAYOUT srcImageLayout, image_t* dstImage, asset::E_IMAGE_LAYOUT dstImageLayout, uint32_t regionCount, const SImageBlit* pRegions, asset::ISampler::E_TEXTURE_FILTER filter)
264+
virtual bool copyImage(const image_t* srcImage, asset::IImage::E_LAYOUT srcImageLayout, image_t* dstImage, asset::IImage::E_LAYOUT dstImageLayout, uint32_t regionCount, const asset::IImage::SImageCopy* pRegions) = 0;
265+
virtual bool copyBufferToImage(const buffer_t* srcBuffer, image_t* dstImage, asset::IImage::E_LAYOUT dstImageLayout, uint32_t regionCount, const asset::IImage::SBufferCopy* pRegions) = 0;
266+
virtual bool copyImageToBuffer(const image_t* srcImage, asset::IImage::E_LAYOUT srcImageLayout, buffer_t* dstBuffer, uint32_t regionCount, const asset::IImage::SBufferCopy* pRegions) = 0;
267+
virtual bool blitImage(const image_t* srcImage, asset::IImage::E_LAYOUT srcImageLayout, image_t* dstImage, asset::IImage::E_LAYOUT dstImageLayout, uint32_t regionCount, const SImageBlit* pRegions, asset::ISampler::E_TEXTURE_FILTER filter)
268268
{
269269
for (uint32_t i = 0u; i < regionCount; ++i)
270270
{
@@ -275,7 +275,7 @@ class NBL_API ICommandBuffer
275275
}
276276
return true;
277277
}
278-
virtual bool resolveImage(const image_t* srcImage, asset::E_IMAGE_LAYOUT srcImageLayout, image_t* dstImage, asset::E_IMAGE_LAYOUT dstImageLayout, uint32_t regionCount, const SImageResolve* pRegions) = 0;
278+
virtual bool resolveImage(const image_t* srcImage, asset::IImage::E_LAYOUT srcImageLayout, image_t* dstImage, asset::IImage::E_LAYOUT dstImageLayout, uint32_t regionCount, const SImageResolve* pRegions) = 0;
279279

280280
virtual bool bindVertexBuffers(uint32_t firstBinding, uint32_t bindingCount, const buffer_t*const *const pBuffers, const size_t* pOffsets) = 0;
281281

@@ -326,8 +326,8 @@ class NBL_API ICommandBuffer
326326
) = 0;
327327
virtual bool pushConstants(const pipeline_layout_t* layout, core::bitflag<asset::IShader::E_SHADER_STAGE> stageFlags, uint32_t offset, uint32_t size, const void* pValues) = 0;
328328

329-
virtual bool clearColorImage(image_t* image, asset::E_IMAGE_LAYOUT imageLayout, const SClearColorValue* pColor, uint32_t rangeCount, const asset::IImage::SSubresourceRange* pRanges) = 0;
330-
virtual bool clearDepthStencilImage(image_t* image, asset::E_IMAGE_LAYOUT imageLayout, const SClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const asset::IImage::SSubresourceRange* pRanges) = 0;
329+
virtual bool clearColorImage(image_t* image, asset::IImage::E_LAYOUT imageLayout, const SClearColorValue* pColor, uint32_t rangeCount, const asset::IImage::SSubresourceRange* pRanges) = 0;
330+
virtual bool clearDepthStencilImage(image_t* image, asset::IImage::E_LAYOUT imageLayout, const SClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const asset::IImage::SSubresourceRange* pRanges) = 0;
331331
virtual bool clearAttachments(uint32_t attachmentCount, const SClearAttachment* pAttachments, uint32_t rectCount, const SClearRect* pRects) = 0;
332332
virtual bool fillBuffer(buffer_t* dstBuffer, size_t dstOffset, size_t size, uint32_t data) = 0;
333333
virtual bool updateBuffer(buffer_t* dstBuffer, size_t dstOffset, size_t dataSize, const void* pData) = 0;

include/nbl/asset/IDescriptorSet.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#include "nbl/asset/IDescriptor.h"
1616
#include "nbl/asset/IDescriptorSetLayout.h" //for E_DESCRIPTOR_TYPE
1717
#include "nbl/core/SRange.h"
18-
#include "nbl/asset/EImageLayout.h"
1918

2019
namespace nbl::asset
2120
{
@@ -54,7 +53,7 @@ class NBL_API IDescriptorSet : public virtual core::IReferenceCounted
5453
// This will be ignored if the DS layout already has an immutable sampler specified for the binding.
5554
core::smart_refctd_ptr<typename layout_t::sampler_type> sampler;
5655
//! Irrelevant in OpenGL backend
57-
E_IMAGE_LAYOUT imageLayout;
56+
IImage::E_LAYOUT imageLayout;
5857
};
5958

6059
core::smart_refctd_ptr<IDescriptor> desc;
@@ -111,7 +110,7 @@ class NBL_API IDescriptorSet : public virtual core::IReferenceCounted
111110
inline SDescriptorInfo& operator=(SDescriptorInfo&& other)
112111
{
113112
if (desc && desc->getTypeCategory()==IDescriptor::EC_IMAGE)
114-
image = {nullptr,EIL_UNDEFINED};
113+
image = {nullptr,IImage::EL_UNDEFINED};
115114
desc = std::move(other.desc);
116115
if (desc)
117116
{

include/nbl/asset/IGraphicsPipeline.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class NBL_API IGraphicsPipeline
1919
struct SCreationParams
2020
{
2121
core::smart_refctd_ptr<const renderpass_independent_t> renderpassIndependent;
22-
IImage::E_SAMPLE_COUNT_FLAGS rasterizationSamplesHint = IImage::ESCF_1_BIT;
22+
IImage::E_SAMPLE_COUNT_FLAGS rasterizationSamples = IImage::ESCF_1_BIT;
2323
core::smart_refctd_ptr<const RenderpassType> renderpass;
2424
uint32_t subpassIx = 0u;
2525
core::bitflag<ICPURenderpassIndependentPipeline::E_PIPELINE_CREATION> createFlags;
@@ -42,9 +42,11 @@ class NBL_API IGraphicsPipeline
4242
}
4343

4444
const renderpass_independent_t* getRenderpassIndependentPipeline() const { return m_params.renderpassIndependent.get(); }
45+
46+
// TODO: why do we have these getters for lazy people!?
4547
const renderpass_t* getRenderpass() const { return m_params.renderpass.get(); }
4648
uint32_t getSubpassIndex() const { return m_params.subpassIx; }
47-
IImage::E_SAMPLE_COUNT_FLAGS getRasterSamplesHint() const { return m_params.rasterizationSamplesHint; }
49+
4850
const SCreationParams& getCreationParameters() const { return m_params; }
4951

5052
protected:

0 commit comments

Comments
 (0)