Skip to content

Commit 1d19298

Browse files
committed
Removed volk from Material and removed core.h
1 parent 361cf7f commit 1d19298

29 files changed

+257
-164
lines changed

engine/render/renderer/Core.h

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

engine/render/renderer/Renderer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919
#include "render/renderer/platform/vulkan/DescriptorPool.h"
2020
#include "renderer/Renderer2D.h"
2121
#include "renderer/Renderer3D.h"
22+
#include "renderer/Common.h"
2223

2324
namespace Siege
2425
{
26+
2527
class Renderer
2628
{
2729
public:

engine/render/renderer/framebuffer/Framebuffer.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@
99
#ifndef SIEGE_ENGINE_FRAMEBUFFER_H
1010
#define SIEGE_ENGINE_FRAMEBUFFER_H
1111

12-
#include "../Core.h"
1312
#include "../image/FrameImages.h"
1413

14+
#include <utils/collections/HeapArray.h>
15+
1516
namespace Siege
1617
{
1718

engine/render/renderer/image/FrameImages.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ FrameImages::FrameImages(VkSwapchainKHR swapchain,
4242
{
4343
auto device = Vulkan::Context::GetVkLogicalDevice();
4444

45-
vkGetSwapchainImagesKHR(device, swapchain, OUT & imageCount, nullptr);
45+
vkGetSwapchainImagesKHR(device, swapchain, &imageCount, nullptr);
4646

4747
FrameImages::SetImageCount(imageCount);
4848

4949
VkImage swapchainImages[imageCount];
5050

51-
vkGetSwapchainImagesKHR(device, swapchain, &imageCount, OUT swapchainImages);
51+
vkGetSwapchainImagesKHR(device, swapchain, &imageCount, swapchainImages);
5252

5353
Siege::Vulkan::Image::Config config = {imageFormat,
5454
imageExtent,

engine/render/renderer/image/FrameImages.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
#ifndef SIEGE_ENGINE_FRAME_IMAGES_H
1010
#define SIEGE_ENGINE_FRAME_IMAGES_H
1111

12-
#include "../Core.h"
1312
#include "render/renderer/platform/vulkan/Image.h"
1413
#include "render/renderer/platform/vulkan/utils/Image.h"
1514

engine/render/renderer/lights/PointLight.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
#include <utils/Colour.h>
1313

14-
#include "../Core.h"
1514
#include "../model/Model.h"
1615

1716
namespace Siege

engine/render/renderer/model/Model.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//
88

99
#include "Model.h"
10+
#include "render/renderer/platform/vulkan/utils/Draw.h"
1011

1112
#define TINYOBJLOADER_IMPLEMENTATION
1213
#include <tiny_obj_loader.h>
@@ -180,13 +181,15 @@ void Model::Draw(Vulkan::CommandBuffer& commandBuffer,
180181
uint32_t currentFrame,
181182
const uint32_t& instances)
182183
{
183-
vkCmdDraw(commandBuffer.Get(), mesh.GetVertexCount(currentFrame), 1, 0, instances);
184+
using namespace Vulkan;
185+
Utils::Draw(commandBuffer.Get(), mesh.GetVertexCount(currentFrame), 1, 0, instances);
184186
}
185187

186188
void Model::DrawIndexed(Vulkan::CommandBuffer& commandBuffer,
187189
const uint32_t frameIndex,
188190
const uint32_t& instances)
189191
{
190-
vkCmdDrawIndexed(commandBuffer.Get(), mesh.GetIndexCount(frameIndex), 1, 0, 0, instances);
192+
using namespace Vulkan;
193+
Utils::DrawIndexed(commandBuffer.Get(), mesh.GetIndexCount(frameIndex), 1, 0, 0, instances);
191194
}
192195
} // namespace Siege

engine/render/renderer/platform/vulkan/IndexBuffer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,8 @@ void IndexBuffer::Allocate(VkDevice device)
116116
size,
117117
VK_BUFFER_USAGE_INDEX_BUFFER_BIT,
118118
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
119-
OUT buffer,
120-
OUT memory);
119+
buffer,
120+
memory);
121121
}
122122

123123
void IndexBuffer::Copy(VkDevice device, unsigned int newSize, const unsigned int* data)

engine/render/renderer/platform/vulkan/Material.cpp

Lines changed: 85 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,26 @@ Material::Material(Shader vertShader, Shader fragShader, bool isWritingDepth) :
3232

3333
auto device = Context::GetVkLogicalDevice();
3434

35+
const auto framesCount = Swapchain::MAX_FRAMES_IN_FLIGHT;
36+
3537
// Separate uniforms into unique properties
3638

39+
bufferUpdates = MHArray<MHArray<UniformBufferUpdate>>(framesCount);
40+
imageUpdates = MHArray<MHArray<UniformImageUpdate>>(framesCount);
41+
42+
for(size_t i = 0; i < framesCount; i++)
43+
{
44+
bufferUpdates.Append(MHArray<UniformBufferUpdate>(10));
45+
imageUpdates.Append(MHArray<UniformImageUpdate>(MAX_TEXTURES));
46+
}
47+
48+
textureInfos = MHArray<ImageData>(MAX_TEXTURES);
49+
3750
uint64_t offset {0};
3851

3952
AddShader(vertexShader, OUT offset);
4053
AddShader(fragmentShader, OUT offset);
4154

42-
auto framesCount = Swapchain::MAX_FRAMES_IN_FLIGHT;
43-
4455
// Allocate buffer which can store all the data we need
4556
Buffer::CreateBuffer(bufferSize,
4657
Vulkan::Utils::STORAGE_BUFFER | Vulkan::Utils::UNIFORM_BUFFER,
@@ -51,8 +62,6 @@ Material::Material(Shader vertShader, Shader fragShader, bool isWritingDepth) :
5162
// Set the number of frames
5263
perFrameDescriptorSets = MHArray<MSArray<VkDescriptorSet, MAX_UNIFORM_SETS>>(framesCount);
5364

54-
writes = MHArray<MSArray<VkWriteDescriptorSet, 10>>(framesCount);
55-
5665
// Create Descriptor Set Layout for Sets
5766
for (auto slotIt = propertiesSlots.CreateIterator(); slotIt; ++slotIt)
5867
{
@@ -87,7 +96,7 @@ Material::Material(Shader vertShader, Shader fragShader, bool isWritingDepth) :
8796
WriteSet(slotIt.GetIndex(), slot);
8897
}
8998

90-
for (auto writeIt = writes.CreateIterator(); writeIt; ++writeIt) Write(*writeIt);
99+
for(size_t i = 0; i < framesCount; i++) UpdateUniforms(bufferUpdates[i], imageUpdates[i]);
91100

92101
// Create Pipeline
93102
Recreate();
@@ -153,8 +162,6 @@ uint32_t Material::SetTexture(Hash::StringId id, Texture2D* texture)
153162
using namespace Utils;
154163
using namespace Descriptor;
155164

156-
auto& writeSets = writes[Renderer::GetCurrentFrameIndex()];
157-
158165
auto texIndex = FindTextureIndex(texture->GetId());
159166

160167
if (texIndex > -1) return texIndex;
@@ -173,15 +180,11 @@ uint32_t Material::SetTexture(Hash::StringId id, Texture2D* texture)
173180

174181
auto info = texture->GetInfo();
175182

176-
texture2DInfos[texIndex] = {info.sampler,
177-
info.imageInfo.view,
178-
ToVkImageLayout(info.imageInfo.layout)};
179-
180-
if (writeSets.Count() > 0) break;
183+
textureInfos[texIndex] = {info.sampler, info.imageInfo.view, info.imageInfo.layout};
181184

182185
auto prop = properties[propIdx];
183186

184-
for (auto write = writes.CreateFIterator(); write; ++write)
187+
for (auto write = imageUpdates.CreateFIterator(); write; ++write)
185188
{
186189
QueueImageUpdate(*write,
187190
perFrameDescriptorSets[write.GetIndex()][it.GetIndex()],
@@ -238,10 +241,9 @@ void Material::AddShader(const Shader& shader, uint64_t& offset)
238241
auto& defaultTexture2DInfo = shader.GetDefaultTexture2DInfo();
239242
for (size_t i = 0; i < uniform.count; i++)
240243
{
241-
texture2DInfos.Append(
242-
{defaultTexture2DInfo.sampler,
243-
defaultTexture2DInfo.imageInfo.view,
244-
Utils::ToVkImageLayout(defaultTexture2DInfo.imageInfo.layout)});
244+
textureInfos.Append({defaultTexture2DInfo.sampler,
245+
defaultTexture2DInfo.imageInfo.view,
246+
defaultTexture2DInfo.imageInfo.layout});
245247
}
246248
}
247249
}
@@ -287,11 +289,15 @@ void Material::Update()
287289
{
288290
auto currentFrameIdx = Renderer::GetCurrentFrameIndex();
289291

290-
auto& targetSets = writes[currentFrameIdx];
292+
auto& targetBuffers = bufferUpdates[currentFrameIdx];
293+
auto& targetImages = imageUpdates[currentFrameIdx];
291294

292295
using Vulkan::Context;
293296

294-
Write(targetSets);
297+
// Write(targetSets);
298+
UpdateUniforms(targetBuffers, targetImages);
299+
300+
targetBuffers.Clear();
295301
}
296302

297303
void Material::Update(Hash::StringId id)
@@ -302,8 +308,13 @@ void Material::Update(Hash::StringId id)
302308

303309
if (propertyIndex == -1) return;
304310

305-
auto& setsToWrite = writes[Renderer::GetCurrentFrameIndex()];
306-
Write(setsToWrite);
311+
auto& buffersToWrite = bufferUpdates[Renderer::GetCurrentFrameIndex()];
312+
auto& imagesToWrite = imageUpdates[Renderer::GetCurrentFrameIndex()];
313+
// Write(setsToWrite);
314+
UpdateUniforms(buffersToWrite, imagesToWrite);
315+
316+
buffersToWrite.Clear();
317+
imagesToWrite.Clear();
307318
}
308319
}
309320

@@ -317,55 +328,79 @@ void Material::WriteSet(uint32_t set, PropertiesSlot& slot)
317328
for (auto propIt = properties.CreateIterator(); propIt; ++propIt)
318329
{
319330
auto prop = *propIt;
320-
bufferInfos.Append(CreateBufferInfo(buffer.buffer, prop.offset, prop.size));
331+
321332
for (auto setIt = perFrameDescriptorSets.CreateFIterator(); setIt; ++setIt)
322333
{
334+
323335
auto sets = *setIt;
324336
if (IsTexture2D(prop.type))
325-
QueueImageUpdate(writes[setIt.GetIndex()], sets[set], propIt.GetIndex());
337+
QueueImageUpdate(imageUpdates[setIt.GetIndex()], sets[set], propIt.GetIndex());
326338
else
327-
QueuePropertyUpdate(writes[setIt.GetIndex()],
339+
QueuePropertyUpdate(bufferUpdates[setIt.GetIndex()],
328340
sets[set],
329341
prop.type,
330342
propIt.GetIndex(),
331-
1);
343+
1,
344+
{buffer.buffer, prop.offset, prop.size});
332345
}
333346
}
334347
}
335348

336-
void Material::Write(MSArray<VkWriteDescriptorSet, 10>& sets)
349+
void Material::UpdateUniforms(MHArray<UniformBufferUpdate>& buffers, MHArray<UniformImageUpdate>& images)
337350
{
338-
Utils::Descriptor::WriteSets(Context::GetVkLogicalDevice(), sets.Data(), sets.Count());
351+
using namespace Vulkan::Utils::Descriptor;
339352

340-
sets.Clear();
353+
MSArray<VkWriteDescriptorSet, 10> writeSets;
354+
MSArray<VkDescriptorBufferInfo, MAX_UNIFORM_SETS * 10> bufferInfs;
355+
MSArray<VkDescriptorImageInfo, MAX_TEXTURES> imageInfos;
356+
357+
for(auto it = buffers.CreateIterator(); it; ++it)
358+
{
359+
auto& update = it->update;
360+
auto& bufferInfo = it->bufferUpdate;
361+
362+
bufferInfs.Append({bufferInfo.buffer, bufferInfo.offset, bufferInfo.range});
363+
writeSets.Append(CreateWriteSet(update.dstBinding, update.set, update.descriptors, Utils::ToVkDescriptorType(update.type), &bufferInfs.Back()));
364+
}
365+
366+
for(auto it = textureInfos.CreateIterator(); it; ++it)
367+
{
368+
imageInfos.Append({it->sampler, it->view, Utils::ToVkImageLayout(it->layout)});
369+
}
370+
371+
for(auto it = images.CreateIterator(); it; ++it)
372+
{
373+
auto& update = it->update;
374+
375+
writeSets.Append(WriteDescriptorImage(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, update.set, imageInfos.Data(), update.dstBinding, update.descriptors, update.dstIndex));
376+
}
377+
378+
Utils::Descriptor::WriteSets(Context::GetVkLogicalDevice(), writeSets.Data(), writeSets.Count());
379+
buffers.Clear();
380+
images.Clear();
341381
}
342382

343-
void Material::QueueImageUpdate(MSArray<VkWriteDescriptorSet, 10>& writeQueue,
383+
void Material::QueueImageUpdate(MHArray<UniformImageUpdate>& imageUpdate,
344384
VkDescriptorSet& set,
345385
uint32_t binding,
346386
uint32_t count,
347387
uint32_t index)
348388
{
349389
using namespace Vulkan::Utils::Descriptor;
350390

351-
writeQueue.Append(WriteDescriptorImage(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
352-
set,
353-
texture2DInfos.Data(),
354-
binding,
355-
count,
356-
index));
391+
imageUpdate.Append({{set, binding, index, count, Utils::UniformType::TEXTURE2D}, textureInfos});
357392
}
358393

359-
void Material::QueuePropertyUpdate(MSArray<VkWriteDescriptorSet, 10>& writeQueue,
394+
void Material::QueuePropertyUpdate(MHArray<UniformBufferUpdate>& bufferUpdateQueue,
360395
VkDescriptorSet& set,
361396
Utils::UniformType type,
362397
uint32_t binding,
363-
uint32_t count)
398+
uint32_t count,
399+
BufferData bufferInfo)
364400
{
365401
using namespace Vulkan::Utils::Descriptor;
366402

367-
writeQueue.Append(
368-
CreateWriteSet(binding, set, count, ToVkDescriptorType(type), &bufferInfos[binding]));
403+
bufferUpdateQueue.Append({{set, binding, 0, count, type}, bufferInfo});
369404
}
370405

371406
int32_t Material::FindPropertyIndex(Hash::StringId id, PropertiesSlot& slot)
@@ -405,24 +440,25 @@ void Material::Swap(Material& other)
405440
auto tmpGraphicsPipeline = std::move(graphicsPipeline);
406441
auto tmpPropertiesSlots = propertiesSlots;
407442
auto tmpPerFrameDescriptors = std::move(perFrameDescriptorSets);
408-
auto tmpWrites = std::move(writes);
409-
auto tmpBufferInfos = std::move(bufferInfos);
410-
auto tmpTexture2DInfos = std::move(texture2DInfos);
411443
auto tmpPushConstant = pushConstant;
412444
auto tmpIsWritingDepth = isWritingDepth;
413445

446+
auto tmpTextureInfos = std::move(textureInfos);
447+
auto tmpImageUpdates = std::move(imageUpdates);
448+
auto tmpBufferUpdates = std::move(bufferUpdates);
449+
414450
vertexShader = std::move(other.vertexShader);
415451
fragmentShader = std::move(other.fragmentShader);
416452
bufferSize = other.bufferSize;
417453
buffer = other.buffer;
418454
graphicsPipeline = std::move(other.graphicsPipeline);
419455
propertiesSlots = other.propertiesSlots;
420456
perFrameDescriptorSets = std::move(other.perFrameDescriptorSets);
421-
writes = std::move(other.writes);
422-
bufferInfos = std::move(other.bufferInfos);
423-
texture2DInfos = std::move(other.texture2DInfos);
424457
pushConstant = other.pushConstant;
425458
isWritingDepth = other.isWritingDepth;
459+
textureInfos = std::move(other.textureInfos);
460+
imageUpdates = std::move(other.imageUpdates);
461+
bufferUpdates = std::move(other.bufferUpdates);
426462

427463
other.vertexShader = std::move(tmpVertexShader);
428464
other.fragmentShader = std::move(tmpFragmentShader);
@@ -431,10 +467,11 @@ void Material::Swap(Material& other)
431467
other.graphicsPipeline = std::move(tmpGraphicsPipeline);
432468
other.propertiesSlots = tmpPropertiesSlots;
433469
other.perFrameDescriptorSets = std::move(tmpPerFrameDescriptors);
434-
other.writes = std::move(tmpWrites);
435-
other.bufferInfos = std::move(tmpBufferInfos);
436-
other.texture2DInfos = std::move(tmpTexture2DInfos);
437470
other.pushConstant = tmpPushConstant;
438471
other.isWritingDepth = tmpIsWritingDepth;
472+
473+
other.textureInfos = std::move(tmpTextureInfos);
474+
other.imageUpdates = std::move(tmpImageUpdates);
475+
other.bufferUpdates = std::move(tmpBufferUpdates);
439476
}
440477
} // namespace Siege::Vulkan

0 commit comments

Comments
 (0)