Skip to content

Commit 9a35c9f

Browse files
committed
removed vertex buffer, use const vertex array in shader instead
1 parent a14c9dc commit 9a35c9f

File tree

5 files changed

+28
-50
lines changed

5 files changed

+28
-50
lines changed

include/nbl/ext/DebugDraw/CDrawAABB.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,15 @@ class DrawAABB final : public core::IReferenceCounted
6464

6565
protected:
6666
DrawAABB(SCreationParameters&& _params, core::smart_refctd_ptr<video::IGPUGraphicsPipeline> singlePipeline, core::smart_refctd_ptr<video::IGPUGraphicsPipeline> batchPipeline,
67-
core::smart_refctd_ptr<video::IGPUBuffer> indicesBuffer, core::smart_refctd_ptr<video::IGPUBuffer> verticesBuffer);
67+
core::smart_refctd_ptr<video::IGPUBuffer> indicesBuffer);
6868
~DrawAABB() override;
6969

7070
private:
7171
static core::smart_refctd_ptr<video::IGPUGraphicsPipeline> createPipeline(SCreationParameters& params, const video::IGPUPipelineLayout* pipelineLayout, const std::string& vsPath, const std::string& fsPath);
7272
static bool createStreamingBuffer(SCreationParameters& params);
7373
static core::smart_refctd_ptr<video::IGPUBuffer> createIndicesBuffer(SCreationParameters& params);
74-
static core::smart_refctd_ptr<video::IGPUBuffer> createVerticesBuffer(SCreationParameters& params);
7574

7675
core::smart_refctd_ptr<video::IGPUBuffer> m_indicesBuffer;
77-
core::smart_refctd_ptr<video::IGPUBuffer> m_verticesBuffer;
7876

7977
SCachedCreationParameters m_cachedCreationParams;
8078

include/nbl/ext/DebugDraw/builtin/hlsl/aabb_instances.vertex.hlsl

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,19 @@ using namespace nbl::ext::debug_draw;
1313
[shader("vertex")]
1414
PSInput main()
1515
{
16-
PSInput output;
16+
const float32_t3 unitAABBVertices[8] = {
17+
float32_t3(0.0, 0.0, 0.0),
18+
float32_t3(1.0, 0.0, 0.0),
19+
float32_t3(0.0, 0.0, 1.0),
20+
float32_t3(1.0, 0.0, 1.0),
21+
float32_t3(0.0, 1.0, 0.0),
22+
float32_t3(1.0, 1.0, 0.0),
23+
float32_t3(0.0, 1.0, 1.0),
24+
float32_t3(1.0, 1.0, 1.0)
25+
};
1726

18-
float32_t3 vertex = (bda::__ptr<float32_t3>::create(pc.pVertexBuffer) + glsl::gl_VertexIndex()).deref_restrict().load();
27+
PSInput output;
28+
float32_t3 vertex = unitAABBVertices[glsl::gl_VertexIndex()];
1929
InstanceData instance = vk::BufferPointer<InstanceData>(pc.pInstanceBuffer + sizeof(InstanceData) * glsl::gl_InstanceIndex()).Get();
2030

2131
output.position = math::linalg::promoted_mul(instance.transform, vertex);

include/nbl/ext/DebugDraw/builtin/hlsl/common.hlsl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,11 @@ struct InstanceData
1818

1919
struct SSinglePushConstants
2020
{
21-
uint64_t pVertexBuffer;
2221
InstanceData instance;
2322
};
2423

2524
struct SPushConstants
2625
{
27-
uint64_t pVertexBuffer;
2826
uint64_t pInstanceBuffer;
2927
};
3028

include/nbl/ext/DebugDraw/builtin/hlsl/single.vertex.hlsl

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,19 @@ using namespace nbl::ext::debug_draw;
1313
[shader("vertex")]
1414
PSInput main()
1515
{
16+
const float32_t3 unitAABBVertices[8] = {
17+
float32_t3(0.0, 0.0, 0.0),
18+
float32_t3(1.0, 0.0, 0.0),
19+
float32_t3(0.0, 0.0, 1.0),
20+
float32_t3(1.0, 0.0, 1.0),
21+
float32_t3(0.0, 1.0, 0.0),
22+
float32_t3(1.0, 1.0, 0.0),
23+
float32_t3(0.0, 1.0, 1.0),
24+
float32_t3(1.0, 1.0, 1.0)
25+
};
26+
1627
PSInput output;
17-
float32_t3 vertex = (bda::__ptr<float32_t3>::create(pc.pVertexBuffer) + glsl::gl_VertexIndex()).deref_restrict().load();
28+
float32_t3 vertex = unitAABBVertices[glsl::gl_VertexIndex()];
1829

1930
output.position = math::linalg::promoted_mul(pc.instance.transform, vertex);
2031
output.color = pc.instance.color;

src/nbl/ext/DebugDraw/CDrawAABB.cpp

Lines changed: 3 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,13 @@ core::smart_refctd_ptr<DrawAABB> DrawAABB::create(SCreationParameters&& params)
4444
logger->log("Failed to create indices buffer!", ILogger::ELL_ERROR);
4545
return nullptr;
4646
}
47-
auto verticesBuffer = createVerticesBuffer(params);
48-
if (!verticesBuffer)
49-
{
50-
logger->log("Failed to create vertices buffer!", ILogger::ELL_ERROR);
51-
return nullptr;
52-
}
5347

54-
return core::smart_refctd_ptr<DrawAABB>(new DrawAABB(std::move(params), singlePipeline, batchPipeline, indicesBuffer, verticesBuffer));
48+
return core::smart_refctd_ptr<DrawAABB>(new DrawAABB(std::move(params), singlePipeline, batchPipeline, indicesBuffer));
5549
}
5650

57-
DrawAABB::DrawAABB(SCreationParameters&& params, core::smart_refctd_ptr<video::IGPUGraphicsPipeline> singlePipeline, smart_refctd_ptr<IGPUGraphicsPipeline> batchPipeline,
58-
smart_refctd_ptr<IGPUBuffer> indicesBuffer, smart_refctd_ptr<IGPUBuffer> verticesBuffer)
51+
DrawAABB::DrawAABB(SCreationParameters&& params, core::smart_refctd_ptr<video::IGPUGraphicsPipeline> singlePipeline, smart_refctd_ptr<IGPUGraphicsPipeline> batchPipeline, smart_refctd_ptr<IGPUBuffer> indicesBuffer)
5952
: m_cachedCreationParams(std::move(params)), m_singlePipeline(std::move(singlePipeline)), m_batchPipeline(std::move(batchPipeline)),
60-
m_indicesBuffer(std::move(indicesBuffer)), m_verticesBuffer(std::move(verticesBuffer))
53+
m_indicesBuffer(std::move(indicesBuffer))
6154
{
6255
}
6356

@@ -271,36 +264,6 @@ smart_refctd_ptr<IGPUBuffer> DrawAABB::createIndicesBuffer(SCreationParameters&
271264
return indicesBuffer;
272265
}
273266

274-
smart_refctd_ptr<IGPUBuffer> DrawAABB::createVerticesBuffer(SCreationParameters& params)
275-
{
276-
const auto unitAABB = core::aabbox3d<float>({ 0, 0, 0 }, { 1, 1, 1 });
277-
float32_t3 pMin = { 0, 0, 0 };
278-
float32_t3 pMax = { 1, 1, 1 };
279-
280-
std::array<hlsl::float32_t3, VerticesCount> unitAABBVertices;
281-
unitAABBVertices[0] = float32_t3(pMin.x, pMin.y, pMin.z);
282-
unitAABBVertices[1] = float32_t3(pMax.x, pMin.y, pMin.z);
283-
unitAABBVertices[2] = float32_t3(pMin.x, pMin.y, pMax.z);
284-
unitAABBVertices[3] = float32_t3(pMax.x, pMin.y, pMax.z);
285-
unitAABBVertices[4] = float32_t3(pMin.x, pMax.y, pMin.z);
286-
unitAABBVertices[5] = float32_t3(pMax.x, pMax.y, pMin.z);
287-
unitAABBVertices[6] = float32_t3(pMin.x, pMax.y, pMax.z);
288-
unitAABBVertices[7] = float32_t3(pMax.x, pMax.y, pMax.z);
289-
290-
IGPUBuffer::SCreationParams bufparams;
291-
bufparams.size = sizeof(float32_t3) * unitAABBVertices.size();
292-
bufparams.usage = IGPUBuffer::EUF_STORAGE_BUFFER_BIT | IGPUBuffer::EUF_TRANSFER_DST_BIT | IGPUBuffer::EUF_SHADER_DEVICE_ADDRESS_BIT;
293-
294-
smart_refctd_ptr<IGPUBuffer> vertexBuffer;
295-
params.utilities->createFilledDeviceLocalBufferOnDedMem(
296-
SIntendedSubmitInfo{ .queue = params.transfer },
297-
std::move(bufparams),
298-
unitAABBVertices.data()
299-
).move_into(vertexBuffer);
300-
301-
return vertexBuffer;
302-
}
303-
304267
core::smart_refctd_ptr<video::IGPUPipelineLayout> DrawAABB::createPipelineLayoutFromPCRange(video::ILogicalDevice* device, const asset::SPushConstantRange& pcRange)
305268
{
306269
return device->createPipelineLayout({ &pcRange , 1 }, nullptr, nullptr, nullptr, nullptr);
@@ -324,7 +287,6 @@ bool DrawAABB::renderSingle(IGPUCommandBuffer* commandBuffer, const hlsl::shapes
324287
commandBuffer->bindIndexBuffer(indexBinding, asset::EIT_32BIT);
325288

326289
SSinglePushConstants pc;
327-
pc.pVertexBuffer = m_verticesBuffer->getDeviceAddress();
328290

329291
hlsl::float32_t4x4 instanceTransform = getTransformFromAABB(aabb);
330292
pc.instance.transform = hlsl::mul(cameraMat, instanceTransform);
@@ -385,7 +347,6 @@ bool DrawAABB::render(IGPUCommandBuffer* commandBuffer, ISemaphore::SWaitInfo wa
385347
assert(!streaming->needsManualFlushOrInvalidate());
386348

387349
SPushConstants pc;
388-
pc.pVertexBuffer = m_verticesBuffer->getDeviceAddress();
389350
pc.pInstanceBuffer = m_cachedCreationParams.streamingBuffer->getBuffer()->getDeviceAddress() + instancesByteOffset;
390351

391352
commandBuffer->pushConstants(m_batchPipeline->getLayout(), ESS_VERTEX, 0, sizeof(SPushConstants), &pc);

0 commit comments

Comments
 (0)