From fcc4fc12d496b534be48e4846d35d499c193cd0e Mon Sep 17 00:00:00 2001 From: Dynamitos Date: Mon, 28 Aug 2023 21:23:13 +0200 Subject: [PATCH] Refactor ShaderBuffer --- .gitmodules | 3 - external/SPIRV-Cross | 1 - res/shaders/ComputeFrustums.slang | 2 +- res/shaders/ForwardPlus.slang | 2 +- res/shaders/LightCulling.slang | 10 +- res/shaders/TextPass.slang | 2 +- res/shaders/lib/LightEnv.slang | 4 +- res/shaders/lib/PrimitiveSceneData.slang | 2 +- src/Engine/Graphics/CMakeLists.txt | 10 +- src/Engine/Graphics/Graphics.h | 2 +- src/Engine/Graphics/GraphicsInitializer.h | 2 +- src/Engine/Graphics/GraphicsResources.cpp | 6 +- src/Engine/Graphics/GraphicsResources.h | 14 +- src/Engine/Graphics/Mesh.h | 8 +- src/Engine/Graphics/RenderPass/BasePass.h | 4 +- src/Engine/Graphics/RenderPass/DepthPrepass.h | 2 +- .../Graphics/RenderPass/LightCullingPass.cpp | 14 +- .../Graphics/RenderPass/LightCullingPass.h | 12 +- .../RenderPass/RenderGraphResources.cpp | 4 +- .../RenderPass/RenderGraphResources.h | 6 +- src/Engine/Graphics/RenderPass/TextPass.h | 2 +- src/Engine/Graphics/StaticMeshVertexInput.cpp | 81 --------- src/Engine/Graphics/StaticMeshVertexInput.h | 58 ------ src/Engine/Graphics/VertexData.cpp | 0 src/Engine/Graphics/VertexData.h | 13 ++ src/Engine/Graphics/VertexShaderInput.cpp | 165 ----------------- src/Engine/Graphics/VertexShaderInput.h | 166 ------------------ src/Engine/Graphics/Vulkan/VulkanBuffer.cpp | 24 +-- .../Graphics/Vulkan/VulkanDescriptorSets.cpp | 6 +- .../Graphics/Vulkan/VulkanDescriptorSets.h | 2 +- src/Engine/Graphics/Vulkan/VulkanGraphics.cpp | 8 +- src/Engine/Graphics/Vulkan/VulkanGraphics.h | 2 +- .../Graphics/Vulkan/VulkanGraphicsResources.h | 8 +- src/Engine/Scene/Scene.cpp | 10 +- src/Engine/Scene/Scene.h | 8 +- 35 files changed, 99 insertions(+), 564 deletions(-) delete mode 160000 external/SPIRV-Cross delete mode 100644 src/Engine/Graphics/StaticMeshVertexInput.cpp delete mode 100644 src/Engine/Graphics/StaticMeshVertexInput.h create mode 100644 src/Engine/Graphics/VertexData.cpp create mode 100644 src/Engine/Graphics/VertexData.h delete mode 100644 src/Engine/Graphics/VertexShaderInput.cpp delete mode 100644 src/Engine/Graphics/VertexShaderInput.h diff --git a/.gitmodules b/.gitmodules index 2724f8a..349db04 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,9 +10,6 @@ [submodule "external/assimp"] path = external/assimp url = https://github.com/assimp/assimp.git -[submodule "external/SPIRV-Cross"] - path = external/SPIRV-Cross - url = https://github.com/KhronosGroup/SPIRV-Cross.git [submodule "external/stb"] path = external/stb url = https://github.com/nothings/stb diff --git a/external/SPIRV-Cross b/external/SPIRV-Cross deleted file mode 160000 index ea3cd74..0000000 --- a/external/SPIRV-Cross +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ea3cd744266a28c1fa3b977b9b22df679c97b344 diff --git a/res/shaders/ComputeFrustums.slang b/res/shaders/ComputeFrustums.slang index 3e77098..97eaa8b 100644 --- a/res/shaders/ComputeFrustums.slang +++ b/res/shaders/ComputeFrustums.slang @@ -17,7 +17,7 @@ cbuffer DispatchParams uint pad1; } layout(set = 0, binding = 2, std430) -RWStructuredBuffer out_Frustums; +RWShaderBuffer out_Frustums; [numthreads(BLOCK_SIZE, BLOCK_SIZE, 1)] diff --git a/res/shaders/ForwardPlus.slang b/res/shaders/ForwardPlus.slang index ecac115..77d9e14 100644 --- a/res/shaders/ForwardPlus.slang +++ b/res/shaders/ForwardPlus.slang @@ -8,7 +8,7 @@ import PrimitiveSceneData; import MaterialParameter; layout(set = INDEX_LIGHT_ENV, binding = 4) -StructuredBuffer lightIndexList; +ShaderBuffer lightIndexList; layout(set = INDEX_LIGHT_ENV, binding = 5) RWTexture2D lightGrid; diff --git a/res/shaders/LightCulling.slang b/res/shaders/LightCulling.slang index a5b1eb4..2f69ae3 100644 --- a/res/shaders/LightCulling.slang +++ b/res/shaders/LightCulling.slang @@ -21,14 +21,14 @@ layout(set = INDEX_VIEW_PARAMS, binding = 2) Texture2D depthTextureVS; layout(set = INDEX_VIEW_PARAMS, binding = 3) -globallycoherent RWStructuredBuffer oLightIndexCounter; +globallycoherent RWShaderBuffer oLightIndexCounter; layout(set = INDEX_VIEW_PARAMS, binding = 4) -globallycoherent RWStructuredBuffer tLightIndexCounter; +globallycoherent RWShaderBuffer tLightIndexCounter; layout(set = INDEX_VIEW_PARAMS, binding = 5) -RWStructuredBuffer oLightIndexList; +RWShaderBuffer oLightIndexList; layout(set = INDEX_VIEW_PARAMS, binding = 6) -RWStructuredBuffer tLightIndexList; +RWShaderBuffer tLightIndexList; layout(set = INDEX_VIEW_PARAMS, binding = 7) RWTexture2D oLightGrid; @@ -36,7 +36,7 @@ layout(set = INDEX_VIEW_PARAMS, binding = 8) RWTexture2D tLightGrid; layout(set = INDEX_VIEW_PARAMS, binding = 9) -StructuredBuffer frustums; +ShaderBuffer frustums; // Debug //layout(set = INDEX_VIEW_PARAMS, binding = 10) diff --git a/res/shaders/TextPass.slang b/res/shaders/TextPass.slang index 6f383df..8ba61bd 100644 --- a/res/shaders/TextPass.slang +++ b/res/shaders/TextPass.slang @@ -17,7 +17,7 @@ ConstantBuffer viewData; layout(set = 0, binding = 1) SamplerState glyphSampler; //layout(set = 1) -//StructuredBuffer glyphData; +//ShaderBuffer glyphData; layout(set = 1) Texture2D glyphTextures[]; layout(push_constant) diff --git a/res/shaders/lib/LightEnv.slang b/res/shaders/lib/LightEnv.slang index b1feb99..c735830 100644 --- a/res/shaders/lib/LightEnv.slang +++ b/res/shaders/lib/LightEnv.slang @@ -62,10 +62,10 @@ struct PointLight : ILightEnv }; layout(set = INDEX_LIGHT_ENV, binding = 0, std430) -StructuredBuffer directionalLights; +ShaderBuffer directionalLights; layout(set = INDEX_LIGHT_ENV, binding = 1, std430) ConstantBuffer numDirectionalLights; layout(set = INDEX_LIGHT_ENV, binding = 2, std430) -StructuredBuffer pointLights; +ShaderBuffer pointLights; layout(set = INDEX_LIGHT_ENV, binding = 3, std430) ConstantBuffer numPointLights; diff --git a/res/shaders/lib/PrimitiveSceneData.slang b/res/shaders/lib/PrimitiveSceneData.slang index b60a031..edda3c3 100644 --- a/res/shaders/lib/PrimitiveSceneData.slang +++ b/res/shaders/lib/PrimitiveSceneData.slang @@ -6,7 +6,7 @@ struct PrimitiveSceneData }; layout(set = INDEX_SCENE_DATA, binding = 0, std430) -StructuredBuffer gSceneData; +ShaderBuffer gSceneData; [[vk::push_constant]] ConstantBuffer gSceneDataIndex; diff --git a/src/Engine/Graphics/CMakeLists.txt b/src/Engine/Graphics/CMakeLists.txt index 403bbaf..299410a 100644 --- a/src/Engine/Graphics/CMakeLists.txt +++ b/src/Engine/Graphics/CMakeLists.txt @@ -14,10 +14,8 @@ target_sources(Engine MeshBatch.cpp ShaderCompiler.h ShaderCompiler.cpp - VertexShaderInput.h - VertexShaderInput.cpp - StaticMeshVertexInput.h - StaticMeshVertexInput.cpp) + VertexData.h + VertexData.cpp) target_sources(Engine PUBLIC FILE_SET HEADERS @@ -29,9 +27,7 @@ target_sources(Engine Graphics.h Mesh.h MeshBatch.h - ShaderCompiler.h - VertexShaderInput.h - StaticMeshVertexInput.h) + ShaderCompiler.h) add_subdirectory(RenderPass/) add_subdirectory(Vulkan/) \ No newline at end of file diff --git a/src/Engine/Graphics/Graphics.h b/src/Engine/Graphics/Graphics.h index 97b8481..7a3fbd3 100644 --- a/src/Engine/Graphics/Graphics.h +++ b/src/Engine/Graphics/Graphics.h @@ -40,7 +40,7 @@ public: virtual PTexture3D createTexture3D(const TextureCreateInfo &createInfo) = 0; virtual PTextureCube createTextureCube(const TextureCreateInfo &createInfo) = 0; virtual PUniformBuffer createUniformBuffer(const UniformBufferCreateInfo &bulkData) = 0; - virtual PStructuredBuffer createStructuredBuffer(const StructuredBufferCreateInfo &bulkData) = 0; + virtual PShaderBuffer createShaderBuffer(const ShaderBufferCreateInfo &bulkData) = 0; virtual PVertexBuffer createVertexBuffer(const VertexBufferCreateInfo &bulkData) = 0; virtual PIndexBuffer createIndexBuffer(const IndexBufferCreateInfo &bulkData) = 0; virtual PRenderCommand createRenderCommand(const std::string& name = "") = 0; diff --git a/src/Engine/Graphics/GraphicsInitializer.h b/src/Engine/Graphics/GraphicsInitializer.h index b1c5874..31b6ed3 100644 --- a/src/Engine/Graphics/GraphicsInitializer.h +++ b/src/Engine/Graphics/GraphicsInitializer.h @@ -102,7 +102,7 @@ struct UniformBufferCreateInfo BulkResourceData resourceData = BulkResourceData(); uint8 bDynamic = 0; }; -struct StructuredBufferCreateInfo +struct ShaderBufferCreateInfo { BulkResourceData resourceData; uint32 stride; diff --git a/src/Engine/Graphics/GraphicsResources.cpp b/src/Engine/Graphics/GraphicsResources.cpp index e196653..53284ec 100644 --- a/src/Engine/Graphics/GraphicsResources.cpp +++ b/src/Engine/Graphics/GraphicsResources.cpp @@ -196,7 +196,7 @@ bool UniformBuffer::updateContents(const BulkResourceData& resourceData) return true; } -StructuredBuffer::StructuredBuffer(QueueFamilyMapping mapping, uint32 stride, uint32 numElements, const BulkResourceData& resourceData) +ShaderBuffer::ShaderBuffer(QueueFamilyMapping mapping, uint32 stride, uint32 numElements, const BulkResourceData& resourceData) : Buffer(mapping, resourceData.owner) , contents(resourceData.size) , stride(stride) @@ -207,11 +207,11 @@ StructuredBuffer::StructuredBuffer(QueueFamilyMapping mapping, uint32 stride, ui std::memcpy(contents.data(), resourceData.data, resourceData.size); } } -StructuredBuffer::~StructuredBuffer() +ShaderBuffer::~ShaderBuffer() { } -bool StructuredBuffer::updateContents(const BulkResourceData& resourceData) +bool ShaderBuffer::updateContents(const BulkResourceData& resourceData) { assert(contents.size() >= resourceData.size); if(std::memcmp(contents.data(), resourceData.data, resourceData.size) == 0) diff --git a/src/Engine/Graphics/GraphicsResources.h b/src/Engine/Graphics/GraphicsResources.h index 3ca0a37..996a328 100644 --- a/src/Engine/Graphics/GraphicsResources.h +++ b/src/Engine/Graphics/GraphicsResources.h @@ -178,7 +178,7 @@ public: }; DEFINE_REF(DescriptorAllocator) DECLARE_REF(UniformBuffer) -DECLARE_REF(StructuredBuffer) +DECLARE_REF(ShaderBuffer) DECLARE_REF(Texture) class DescriptorSet { @@ -186,7 +186,7 @@ public: virtual ~DescriptorSet() {} virtual void writeChanges() = 0; virtual void updateBuffer(uint32 binding, PUniformBuffer uniformBuffer) = 0; - virtual void updateBuffer(uint32 binding, PStructuredBuffer structuredBuffer) = 0; + virtual void updateBuffer(uint32 binding, PShaderBuffer ShaderBuffer) = 0; virtual void updateSampler(uint32 binding, PSamplerState samplerState) = 0; virtual void updateTexture(uint32 binding, PTexture texture, PSamplerState samplerState = nullptr) = 0; virtual void updateTextureArray(uint32_t binding, Array texture) = 0; @@ -409,13 +409,13 @@ protected: }; DEFINE_REF(IndexBuffer) -class StructuredBuffer : public Buffer +class ShaderBuffer : public Buffer { public: - StructuredBuffer(QueueFamilyMapping mapping, uint32 stride, uint32 numElements, const BulkResourceData& bulkResourceData); - virtual ~StructuredBuffer(); + ShaderBuffer(QueueFamilyMapping mapping, uint32 stride, uint32 numElements, const BulkResourceData& bulkResourceData); + virtual ~ShaderBuffer(); virtual bool updateContents(const BulkResourceData& resourceData); - bool isDataEquals(StructuredBuffer* other) + bool isDataEquals(ShaderBuffer* other) { if(other == nullptr) { @@ -449,7 +449,7 @@ protected: uint32 numElements; uint32 stride; }; -DEFINE_REF(StructuredBuffer) +DEFINE_REF(ShaderBuffer) class VertexStream { public: diff --git a/src/Engine/Graphics/Mesh.h b/src/Engine/Graphics/Mesh.h index 5338532..8e76fd9 100644 --- a/src/Engine/Graphics/Mesh.h +++ b/src/Engine/Graphics/Mesh.h @@ -4,16 +4,16 @@ namespace Seele { -DECLARE_REF(VertexShaderInput) +DECLARE_REF(MeshletBuffer) DECLARE_NAME_REF(Gfx, IndexBuffer) class Mesh { public: - Mesh(PVertexShaderInput vertexInput, Gfx::PIndexBuffer indexBuffer); + Mesh(PMeshletBuffer meshlets); ~Mesh(); - Gfx::PIndexBuffer indexBuffer; - PVertexShaderInput vertexInput; + PMeshletBuffer meshlets; + PVertexData vertexData; PMaterialAsset referencedMaterial; private: }; diff --git a/src/Engine/Graphics/RenderPass/BasePass.h b/src/Engine/Graphics/RenderPass/BasePass.h index 84f04ad..1214526 100644 --- a/src/Engine/Graphics/RenderPass/BasePass.h +++ b/src/Engine/Graphics/RenderPass/BasePass.h @@ -29,7 +29,7 @@ DECLARE_REF(CameraActor) struct BasePassData { Array staticDrawList; - Gfx::PStructuredBuffer sceneDataBuffer; + Gfx::PShaderBuffer sceneDataBuffer; LightEnv lightEnv; }; class BasePass : public RenderPass @@ -55,7 +55,7 @@ private: Gfx::PPipelineLayout basePassLayout; // Set 0: Light environment static constexpr uint32 INDEX_LIGHT_ENV = 0; - Gfx::PStructuredBuffer oLightIndexList; + Gfx::PShaderBuffer oLightIndexList; Gfx::PTexture oLightGrid; Gfx::PDescriptorLayout lightLayout; // Set 1: viewParameter diff --git a/src/Engine/Graphics/RenderPass/DepthPrepass.h b/src/Engine/Graphics/RenderPass/DepthPrepass.h index a6d6cef..8eda67c 100644 --- a/src/Engine/Graphics/RenderPass/DepthPrepass.h +++ b/src/Engine/Graphics/RenderPass/DepthPrepass.h @@ -26,7 +26,7 @@ DEFINE_REF(DepthPrepassMeshProcessor) struct DepthPrepassData { Array staticDrawList; - Gfx::PStructuredBuffer sceneDataBuffer; + Gfx::PShaderBuffer sceneDataBuffer; }; class DepthPrepass : public RenderPass { diff --git a/src/Engine/Graphics/RenderPass/LightCullingPass.cpp b/src/Engine/Graphics/RenderPass/LightCullingPass.cpp index 86efcce..3c80b13 100644 --- a/src/Engine/Graphics/RenderPass/LightCullingPass.cpp +++ b/src/Engine/Graphics/RenderPass/LightCullingPass.cpp @@ -159,7 +159,7 @@ void LightCullingPass::publishOutputs() cullingPipeline = graphics->createComputePipeline(pipelineInfo); uint32 counterReset = 0; - StructuredBufferCreateInfo structInfo = + ShaderBufferCreateInfo structInfo = { .resourceData = { .size = sizeof(uint32), @@ -169,8 +169,8 @@ void LightCullingPass::publishOutputs() .stride = sizeof(uint32), .bDynamic = true, }; - oLightIndexCounter = graphics->createStructuredBuffer(structInfo); - tLightIndexCounter = graphics->createStructuredBuffer(structInfo); + oLightIndexCounter = graphics->createShaderBuffer(structInfo); + tLightIndexCounter = graphics->createShaderBuffer(structInfo); structInfo = { .resourceData = { .size = (uint32)sizeof(uint32) @@ -183,8 +183,8 @@ void LightCullingPass::publishOutputs() .stride = sizeof(uint32), .bDynamic = false, }; - oLightIndexList = graphics->createStructuredBuffer(structInfo); - tLightIndexList = graphics->createStructuredBuffer(structInfo); + oLightIndexList = graphics->createShaderBuffer(structInfo); + tLightIndexList = graphics->createShaderBuffer(structInfo); resources->registerBufferOutput("LIGHTCULLING_OLIGHTLIST", oLightIndexList); resources->registerBufferOutput("LIGHTCULLING_TLIGHTLIST", tLightIndexList); @@ -263,7 +263,7 @@ void LightCullingPass::setupFrustums() uniformInfo.bDynamic = false; dispatchParamsBuffer = graphics->createUniformBuffer(uniformInfo); - StructuredBufferCreateInfo structuredInfo = { + ShaderBufferCreateInfo structuredInfo = { .resourceData = { .size = sizeof(Frustum) * numThreads.x * numThreads.y * numThreads.z, .data = nullptr, @@ -271,7 +271,7 @@ void LightCullingPass::setupFrustums() .stride = sizeof(Frustum), .bDynamic = false, }; - frustumBuffer = graphics->createStructuredBuffer(structuredInfo); + frustumBuffer = graphics->createShaderBuffer(structuredInfo); frustumDescriptorSet = frustumDescriptorLayout->allocateDescriptorSet(); frustumDescriptorSet->updateBuffer(0, viewParamsBuffer); diff --git a/src/Engine/Graphics/RenderPass/LightCullingPass.h b/src/Engine/Graphics/RenderPass/LightCullingPass.h index 246199d..f841bd9 100644 --- a/src/Engine/Graphics/RenderPass/LightCullingPass.h +++ b/src/Engine/Graphics/RenderPass/LightCullingPass.h @@ -44,7 +44,7 @@ private: Plane planes[4]; }; - Gfx::PStructuredBuffer frustumBuffer; + Gfx::PShaderBuffer frustumBuffer; Gfx::PUniformBuffer dispatchParamsBuffer; Gfx::PUniformBuffer viewParamsBuffer; Gfx::PDescriptorSet frustumDescriptorSet; @@ -53,11 +53,11 @@ private: Gfx::PComputePipeline frustumPipeline; Gfx::PTexture2D depthAttachment; - Gfx::PStructuredBuffer frustums; - Gfx::PStructuredBuffer oLightIndexCounter; - Gfx::PStructuredBuffer tLightIndexCounter; - Gfx::PStructuredBuffer oLightIndexList; - Gfx::PStructuredBuffer tLightIndexList; + Gfx::PShaderBuffer frustums; + Gfx::PShaderBuffer oLightIndexCounter; + Gfx::PShaderBuffer tLightIndexCounter; + Gfx::PShaderBuffer oLightIndexList; + Gfx::PShaderBuffer tLightIndexList; Gfx::PTexture2D oLightGrid; Gfx::PTexture2D tLightGrid; Gfx::PDescriptorSet lightEnvDescriptorSet; diff --git a/src/Engine/Graphics/RenderPass/RenderGraphResources.cpp b/src/Engine/Graphics/RenderPass/RenderGraphResources.cpp index 019c864..fa1d5fc 100644 --- a/src/Engine/Graphics/RenderPass/RenderGraphResources.cpp +++ b/src/Engine/Graphics/RenderPass/RenderGraphResources.cpp @@ -32,7 +32,7 @@ Gfx::PTexture RenderGraphResources::requestTexture(const std::string& outputName return registeredTextures[outputName]; } -Gfx::PStructuredBuffer RenderGraphResources::requestBuffer(const std::string& outputName) +Gfx::PShaderBuffer RenderGraphResources::requestBuffer(const std::string& outputName) { if(registeredBuffers.find(outputName) == registeredBuffers.end()) { @@ -62,7 +62,7 @@ void RenderGraphResources::registerTextureOutput(const std::string& outputName, registeredTextures[outputName] = texture; } -void RenderGraphResources::registerBufferOutput(const std::string& outputName, Gfx::PStructuredBuffer buffer) +void RenderGraphResources::registerBufferOutput(const std::string& outputName, Gfx::PShaderBuffer buffer) { registeredBuffers[outputName] = buffer; } diff --git a/src/Engine/Graphics/RenderPass/RenderGraphResources.h b/src/Engine/Graphics/RenderPass/RenderGraphResources.h index 2d0c60b..2f729c2 100644 --- a/src/Engine/Graphics/RenderPass/RenderGraphResources.h +++ b/src/Engine/Graphics/RenderPass/RenderGraphResources.h @@ -13,16 +13,16 @@ public: ~RenderGraphResources(); Gfx::PRenderTargetAttachment requestRenderTarget(const std::string& outputName); Gfx::PTexture requestTexture(const std::string& outputName); - Gfx::PStructuredBuffer requestBuffer(const std::string& outputName); + Gfx::PShaderBuffer requestBuffer(const std::string& outputName); Gfx::PUniformBuffer requestUniform(const std::string& outputName); void registerRenderPassOutput(const std::string& outputName, Gfx::PRenderTargetAttachment attachment); void registerTextureOutput(const std::string& outputName, Gfx::PTexture buffer); - void registerBufferOutput(const std::string& outputName, Gfx::PStructuredBuffer buffer); + void registerBufferOutput(const std::string& outputName, Gfx::PShaderBuffer buffer); void registerUniformOutput(const std::string& outputName, Gfx::PUniformBuffer buffer); protected: Map registeredAttachments; Map registeredTextures; - Map registeredBuffers; + Map registeredBuffers; Map registeredUniforms; }; DEFINE_REF(RenderGraphResources) diff --git a/src/Engine/Graphics/RenderPass/TextPass.h b/src/Engine/Graphics/RenderPass/TextPass.h index fd8a829..f39dbef 100644 --- a/src/Engine/Graphics/RenderPass/TextPass.h +++ b/src/Engine/Graphics/RenderPass/TextPass.h @@ -8,7 +8,7 @@ namespace Seele { DECLARE_NAME_REF(Gfx, Texture2D) DECLARE_NAME_REF(Gfx, RenderTargetAttachment) -DECLARE_NAME_REF(Gfx, StructuredBuffer) +DECLARE_NAME_REF(Gfx, ShaderBuffer) struct TextRender { std::string text; diff --git a/src/Engine/Graphics/StaticMeshVertexInput.cpp b/src/Engine/Graphics/StaticMeshVertexInput.cpp deleted file mode 100644 index 939146a..0000000 --- a/src/Engine/Graphics/StaticMeshVertexInput.cpp +++ /dev/null @@ -1,81 +0,0 @@ -#include "StaticMeshVertexInput.h" -#include "Graphics/Graphics.h" - -using namespace Seele; - -StaticMeshVertexInput::StaticMeshVertexInput(std::string name) - : VertexShaderInput(name) -{ - -} - -StaticMeshVertexInput::~StaticMeshVertexInput() -{ - -} - -void StaticMeshVertexInput::init(Gfx::PGraphics graphics) -{ - if(data.positionStream.vertexBuffer != data.tangentBasisComponents[0].vertexBuffer) - { - Array positionOnlyStreamElements; - positionOnlyStreamElements.add(accessPositionStreamComponent(data.positionStream, 0)); - - initPositionDeclaration(graphics, positionOnlyStreamElements); - } - - Array elements; - if(data.positionStream.vertexBuffer != nullptr) - { - elements.add(accessStreamComponent(data.positionStream, 0)); - } - - uint8 tangentBasisAttributes[3] = {1, 2, 3}; - for(int32 axisIndex = 0; axisIndex < 3; axisIndex++) - { - if(data.tangentBasisComponents[axisIndex].vertexBuffer != nullptr) - { - elements.add(accessStreamComponent(data.tangentBasisComponents[axisIndex], tangentBasisAttributes[axisIndex])); - } - } - - if(data.colorComponent.vertexBuffer != nullptr) - { - elements.add(accessStreamComponent(data.colorComponent, 4)); - } - else - { - elements.add(accessStreamComponent(VertexStreamComponent(graphics->getNullVertexBuffer(), 0, 0, Gfx::SE_FORMAT_R32G32B32A32_SFLOAT), 4)); - } - const int32 baseTexCoordAttribute = 5; - for(uint32 coordinateIndex = 0; coordinateIndex < MAX_TEXCOORDS; ++coordinateIndex) - { - if (data.textureCoordinates[coordinateIndex].vertexBuffer == nullptr) - continue; - elements.add(accessStreamComponent( - data.textureCoordinates[coordinateIndex], - static_cast(baseTexCoordAttribute + coordinateIndex) - )); - } - initDeclaration(graphics, elements); -} - -void StaticMeshVertexInput::setData(StaticMeshDataType&& _data) -{ - data = std::move(_data); -} - -void StaticMeshVertexInput::save(ArchiveBuffer& buffer) -{ - Serialization::save(buffer, name); - Serialization::save(buffer, data); -} - -void StaticMeshVertexInput::load(ArchiveBuffer& buffer) -{ - Serialization::load(buffer, name); - Serialization::load(buffer, data); - init(buffer.getGraphics()); -} - -IMPLEMENT_VERTEX_INPUT_TYPE(StaticMeshVertexInput, "StaticMeshVertexInput") \ No newline at end of file diff --git a/src/Engine/Graphics/StaticMeshVertexInput.h b/src/Engine/Graphics/StaticMeshVertexInput.h deleted file mode 100644 index 3df4bd5..0000000 --- a/src/Engine/Graphics/StaticMeshVertexInput.h +++ /dev/null @@ -1,58 +0,0 @@ -#pragma once -#include "VertexShaderInput.h" - -namespace Seele -{ -enum { MAX_TEXCOORDS = 4 }; -struct StaticMeshDataType -{ - VertexStreamComponent positionStream; - VertexStreamComponent tangentBasisComponents[3]; - - //Dont forget these are 4 component vectors - VertexStreamComponent textureCoordinates[4]; - - VertexStreamComponent colorComponent; -}; -class StaticMeshVertexInput : public VertexShaderInput -{ - DECLARE_VERTEX_INPUT_TYPE(StaticMeshVertexInput) -public: - StaticMeshVertexInput(std::string name); - virtual ~StaticMeshVertexInput(); - virtual void init(Gfx::PGraphics graphics) override; - virtual void save(ArchiveBuffer& buffer) override; - virtual void load(ArchiveBuffer& buffer) override; - void setData(StaticMeshDataType&& data); -private: - StaticMeshDataType data; -}; -DEFINE_REF(StaticMeshVertexInput) -namespace Serialization -{ - static void save(ArchiveBuffer& buffer, StaticMeshDataType& type) - { - Serialization::save(buffer, type.positionStream); - Serialization::save(buffer, type.tangentBasisComponents[0]); - Serialization::save(buffer, type.tangentBasisComponents[1]); - Serialization::save(buffer, type.tangentBasisComponents[2]); - Serialization::save(buffer, type.textureCoordinates[0]); - Serialization::save(buffer, type.textureCoordinates[1]); - Serialization::save(buffer, type.textureCoordinates[2]); - Serialization::save(buffer, type.textureCoordinates[3]); - Serialization::save(buffer, type.colorComponent); - } - static void load(ArchiveBuffer& buffer, StaticMeshDataType& type) - { - Serialization::load(buffer, type.positionStream); - Serialization::load(buffer, type.tangentBasisComponents[0]); - Serialization::load(buffer, type.tangentBasisComponents[1]); - Serialization::load(buffer, type.tangentBasisComponents[2]); - Serialization::load(buffer, type.textureCoordinates[0]); - Serialization::load(buffer, type.textureCoordinates[1]); - Serialization::load(buffer, type.textureCoordinates[2]); - Serialization::load(buffer, type.textureCoordinates[3]); - Serialization::load(buffer, type.colorComponent); - } -} // namespace Serialization -} // namespace Seele \ No newline at end of file diff --git a/src/Engine/Graphics/VertexData.cpp b/src/Engine/Graphics/VertexData.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/Engine/Graphics/VertexData.h b/src/Engine/Graphics/VertexData.h new file mode 100644 index 0000000..15ecca3 --- /dev/null +++ b/src/Engine/Graphics/VertexData.h @@ -0,0 +1,13 @@ +#pragma once +#include "GraphicsResources.h" + +namespace Seele +{ +class VertexData +{ +public: +private: + Gfx::PShaderBuffer vertexData; + +}; +} \ No newline at end of file diff --git a/src/Engine/Graphics/VertexShaderInput.cpp b/src/Engine/Graphics/VertexShaderInput.cpp deleted file mode 100644 index 9b76586..0000000 --- a/src/Engine/Graphics/VertexShaderInput.cpp +++ /dev/null @@ -1,165 +0,0 @@ -#include "VertexShaderInput.h" -#include "Graphics/Mesh.h" -#include "Graphics/Graphics.h" -#include -#include - -using namespace Seele; - -void Seele::Serialization::save(ArchiveBuffer& buffer, VertexStreamComponent& comp) -{ - if (comp.vertexBuffer == nullptr) - { - Serialization::save(buffer, (uint32)0); - } - else - { - Serialization::save(buffer, comp.vertexBuffer->getNumVertices()); - Serialization::save(buffer, comp.vertexBuffer->getVertexSize()); - Array rawBuffer; - comp.vertexBuffer->download(rawBuffer); - Serialization::save(buffer, rawBuffer); - Serialization::save(buffer, comp.streamOffset); - Serialization::save(buffer, comp.offset); - Serialization::save(buffer, comp.stride); - Serialization::save(buffer, comp.type); - } -} -void Seele::Serialization::load(ArchiveBuffer& buffer, VertexStreamComponent& comp) -{ - uint32 numVertices; - Serialization::load(buffer, numVertices); - if (numVertices == 0) - { - comp.vertexBuffer = nullptr; - } - else - { - uint32 vertexSize; - Serialization::load(buffer, vertexSize); - Array rawBuffer; - Serialization::load(buffer, rawBuffer); - VertexBufferCreateInfo createInfo = { - .resourceData = { - .size = rawBuffer.size(), - .data = rawBuffer.data(), - }, - .vertexSize = vertexSize, - .numVertices = numVertices, - }; - comp.vertexBuffer = buffer.getGraphics()->createVertexBuffer(createInfo); - Serialization::load(buffer, comp.streamOffset); - Serialization::load(buffer, comp.offset); - Serialization::load(buffer, comp.stride); - Serialization::load(buffer, comp.type); - } -} - -List& VertexInputType::getTypeList() -{ - static List globalTypeList; - return globalTypeList; -} - -VertexInputType* VertexInputType::getVertexInputByName(const std::string& name) -{ - for(auto type : getTypeList()) - { - if(name.compare(type->getName()) == 0) - { - return type; - } - } - return nullptr; -} - -VertexInputType::VertexInputType(const char* name, - const char* shaderFilename) - : name(name) - , shaderFilename(shaderFilename) -{ - getTypeList().add(this); -} - -VertexInputType::~VertexInputType() -{ - getTypeList().remove(getTypeList().find(this)); -} - -const char* VertexInputType::getName() -{ - return name; -} - -std::string VertexInputType::getShaderFilename() -{ - return shaderFilename; -} - -VertexShaderInput::VertexShaderInput(std::string name) - : name(name) -{ - declaration = new Gfx::VertexDeclaration(); - positionDeclaration = new Gfx::VertexDeclaration(); -} - -VertexShaderInput::~VertexShaderInput() -{ -} - -void VertexShaderInput::init(Gfx::PGraphics) {} - -void VertexShaderInput::getStreams(VertexInputStreamArray& outVertexStreams) const -{ - for(uint32 i = 0; i < streams.size(); ++i) - { - const VertexStream& stream = streams[i]; - if(stream.vertexBuffer == nullptr) - { - outVertexStreams.add(VertexInputStream(i, 0, nullptr)); - } - else - { - outVertexStreams.add(VertexInputStream(i, stream.offset, stream.vertexBuffer)); - } - } -} - -void VertexShaderInput::getPositionOnlyStream(VertexInputStreamArray& outVertexStreams) const -{ - for (uint32 i = 0; i < positionStreams.size(); ++i) - { - const VertexStream& stream = positionStreams[i]; - outVertexStreams.add(VertexInputStream(i, stream.offset, stream.vertexBuffer)); - } -} - -Gfx::VertexElement VertexShaderInput::accessStreamComponent(const VertexStreamComponent& component, uint8 attributeIndex) -{ - VertexStream vertexStream; - vertexStream.vertexBuffer = component.vertexBuffer; - vertexStream.stride = static_cast(component.stride); - vertexStream.offset = static_cast(component.offset); - - return Gfx::VertexElement((uint8)streams.indexOf(streams.addUnique(vertexStream)), static_cast(component.offset), component.type, attributeIndex, vertexStream.stride); -} - -Gfx::VertexElement VertexShaderInput::accessPositionStreamComponent(const VertexStreamComponent& component, uint8 attributeIndex) -{ - VertexStream vertexStream; - vertexStream.vertexBuffer = component.vertexBuffer; - vertexStream.stride = static_cast(component.stride); - vertexStream.offset = static_cast(component.offset); - - return Gfx::VertexElement((uint8)positionStreams.indexOf(positionStreams.addUnique(vertexStream)), static_cast(component.offset), component.type, attributeIndex, vertexStream.stride); -} - -void VertexShaderInput::initDeclaration(Gfx::PGraphics graphics, Array& elements) -{ - declaration = graphics->createVertexDeclaration(elements); -} - -void VertexShaderInput::initPositionDeclaration(Gfx::PGraphics graphics, const Array& elements) -{ - positionDeclaration = graphics->createVertexDeclaration(elements); -} diff --git a/src/Engine/Graphics/VertexShaderInput.h b/src/Engine/Graphics/VertexShaderInput.h deleted file mode 100644 index 3263b8c..0000000 --- a/src/Engine/Graphics/VertexShaderInput.h +++ /dev/null @@ -1,166 +0,0 @@ -#pragma once -#include "MinimalEngine.h" -#include "GraphicsEnums.h" -#include "GraphicsResources.h" -#include "Serialization/ArchiveBuffer.h" - -namespace Seele -{ -// Minimal vertex source used for building commands -struct VertexInputStream -{ - uint32 streamIndex : 4; - uint32 offset : 28; - Gfx::PVertexBuffer vertexBuffer; - - VertexInputStream() - : streamIndex(0), offset(0), vertexBuffer(nullptr) - { - } - - VertexInputStream(uint32 streamIndex, uint32 offset, Gfx::PVertexBuffer vertexBuffer) - : streamIndex(streamIndex), offset(offset), vertexBuffer(vertexBuffer) - { - assert(this->streamIndex == streamIndex && this->offset == offset); - } - - inline bool operator==(const VertexInputStream &rhs) const - { - if (streamIndex != rhs.streamIndex || offset != rhs.offset || vertexBuffer != rhs.vertexBuffer) - { - return false; - } - return true; - } - inline bool operator!=(const VertexInputStream &rhs) const - { - return !(*this == rhs); - } -}; -typedef Array VertexInputStreamArray; //TODO inline allocation - -// Typed data source for a vertex factory -struct VertexStreamComponent -{ - // Source vertex buffer - Gfx::PVertexBuffer vertexBuffer = nullptr; - - // Offset to the start of the vertex buffer fetch - uint32 streamOffset = 0; - - // Offset of the data, relative to the beginnning of each element in the vertex buffer - uint32 offset = 0; - - // Stride of the data - uint32 stride = 0; - - Gfx::SeFormat type = Gfx::SE_FORMAT_UNDEFINED; - - VertexStreamComponent() - {} - - VertexStreamComponent(const Gfx::PVertexBuffer vertexBuffer, uint32 offset, uint32 stride, Gfx::SeFormat type) - : vertexBuffer(vertexBuffer) - , streamOffset(0) - , offset(offset) - , stride(stride) - , type(type) - {} - - VertexStreamComponent(const Gfx::PVertexBuffer vertexBuffer, uint32 streamOffset, uint32 offset, uint32 stride, Gfx::SeFormat type) - : vertexBuffer(vertexBuffer) - , streamOffset(streamOffset) - , offset(offset) - , stride(stride) - , type(type) - {} -}; - -namespace Serialization -{ - void save(ArchiveBuffer& buffer, VertexStreamComponent& comp); - void load(ArchiveBuffer& buffer, VertexStreamComponent& comp); -} // namespace Serialization - -class VertexInputType -{ -public: - static List& getTypeList(); - static VertexInputType* getVertexInputByName(const std::string& name); - - VertexInputType( - const char* name, - const char* shaderFilename - ); - virtual ~VertexInputType(); - - const char* getName(); - std::string getShaderFilename(); -private: - const char* name; - const char* shaderFilename; -}; - -#define DECLARE_VERTEX_INPUT_TYPE(inputClass) \ - public: \ - static VertexInputType staticType; \ - virtual VertexInputType* getType() const override; - -#define IMPLEMENT_VERTEX_INPUT_TYPE(inputClass, shaderFilename) \ - VertexInputType inputClass::staticType( \ - #inputClass, \ - shaderFilename); \ - VertexInputType* inputClass::getType() const { return &staticType; } - -struct MeshDescription; -DECLARE_REF(VertexShaderInput) -class VertexShaderInput -{ -public: - VertexShaderInput(std::string name); - virtual ~VertexShaderInput(); - virtual void init(Gfx::PGraphics); - void getStreams(VertexInputStreamArray& outVertexStreams) const; - void getPositionOnlyStream(VertexInputStreamArray& outVertexStreams) const; - virtual bool supportsTesselation() { return false; } - virtual VertexInputType* getType() const { return nullptr; } - virtual void save(ArchiveBuffer& buffer) {} - virtual void load(ArchiveBuffer& buffer) {} - Gfx::PVertexDeclaration getDeclaration() const {return declaration;} - Gfx::PVertexDeclaration getPositionDeclaration() const {return positionDeclaration;} - std::string getName() const { return name; } -protected: - Gfx::VertexElement accessStreamComponent(const VertexStreamComponent& component, uint8 attributeIndex); - Gfx::VertexElement accessPositionStreamComponent(const VertexStreamComponent& component, uint8 attributeIndex); - - void initDeclaration(Gfx::PGraphics graphics, Array& elements); - void initPositionDeclaration(Gfx::PGraphics graphics, const Array& elements); - - static List registeredInputs; - static std::mutex registeredInputsLock; - Array layout; - - // internal helper class, basically a VertexInputStream plus stride - struct VertexStream - { - Gfx::PVertexBuffer vertexBuffer = nullptr; - uint8 stride = 0; - uint8 offset = 0; - friend bool operator==(const VertexStream& a, const VertexStream& b) - { - return a.vertexBuffer == b.vertexBuffer && - a.stride == b.stride && - a.offset == b.offset; - } - VertexStream() - { - } - }; - Array streams; - Array positionStreams; - Gfx::PVertexDeclaration declaration; - Gfx::PVertexDeclaration positionDeclaration; - std::string name; -}; -DEFINE_REF(VertexShaderInput) -} // namespace Seele diff --git a/src/Engine/Graphics/Vulkan/VulkanBuffer.cpp b/src/Engine/Graphics/Vulkan/VulkanBuffer.cpp index 9d6f5e2..0e7ed34 100644 --- a/src/Engine/Graphics/Vulkan/VulkanBuffer.cpp +++ b/src/Engine/Graphics/Vulkan/VulkanBuffer.cpp @@ -361,8 +361,8 @@ VkAccessFlags UniformBuffer::getDestAccessMask() return VK_ACCESS_UNIFORM_READ_BIT; } -StructuredBuffer::StructuredBuffer(PGraphics graphics, const StructuredBufferCreateInfo &resourceData) - : Gfx::StructuredBuffer(graphics->getFamilyMapping(), resourceData.stride, resourceData.resourceData.size / resourceData.stride, resourceData.resourceData) +ShaderBuffer::ShaderBuffer(PGraphics graphics, const ShaderBufferCreateInfo &resourceData) + : Gfx::ShaderBuffer(graphics->getFamilyMapping(), resourceData.stride, resourceData.resourceData.size / resourceData.stride, resourceData.resourceData) , Vulkan::ShaderBuffer(graphics, resourceData.resourceData.size, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, currentOwner, resourceData.bDynamic) { if (resourceData.resourceData.data != nullptr) @@ -373,21 +373,21 @@ StructuredBuffer::StructuredBuffer(PGraphics graphics, const StructuredBufferCre } } -StructuredBuffer::~StructuredBuffer() +ShaderBuffer::~ShaderBuffer() { } -bool StructuredBuffer::updateContents(const BulkResourceData &resourceData) +bool ShaderBuffer::updateContents(const BulkResourceData &resourceData) { assert(resourceData.size <= getSize()); - Gfx::StructuredBuffer::updateContents(resourceData); + Gfx::ShaderBuffer::updateContents(resourceData); //We always want to update, as the contents could be different on the GPU void* data = lock(); std::memcpy(data, resourceData.data, resourceData.size); unlock(); return true; } -void* StructuredBuffer::lock(bool bWriteOnly) +void* ShaderBuffer::lock(bool bWriteOnly) { if(dedicatedStagingBuffer != nullptr) { @@ -396,7 +396,7 @@ void* StructuredBuffer::lock(bool bWriteOnly) return ShaderBuffer::lock(bWriteOnly); } -void StructuredBuffer::unlock() +void ShaderBuffer::unlock() { if(dedicatedStagingBuffer != nullptr) { @@ -416,28 +416,28 @@ void StructuredBuffer::unlock() } } -void StructuredBuffer::requestOwnershipTransfer(Gfx::QueueType newOwner) +void ShaderBuffer::requestOwnershipTransfer(Gfx::QueueType newOwner) { Gfx::QueueOwnedResource::transferOwnership(newOwner); } -void StructuredBuffer::executeOwnershipBarrier(Gfx::QueueType newOwner) +void ShaderBuffer::executeOwnershipBarrier(Gfx::QueueType newOwner) { Vulkan::ShaderBuffer::executeOwnershipBarrier(newOwner); } -void StructuredBuffer::executePipelineBarrier(VkAccessFlags srcAccess, VkPipelineStageFlags srcStage, +void ShaderBuffer::executePipelineBarrier(VkAccessFlags srcAccess, VkPipelineStageFlags srcStage, VkAccessFlags dstAccess, VkPipelineStageFlags dstStage) { Vulkan::ShaderBuffer::executePipelineBarrier(srcAccess, srcStage, dstAccess, dstStage); } -VkAccessFlags StructuredBuffer::getSourceAccessMask() +VkAccessFlags ShaderBuffer::getSourceAccessMask() { return VK_ACCESS_MEMORY_WRITE_BIT; } -VkAccessFlags StructuredBuffer::getDestAccessMask() +VkAccessFlags ShaderBuffer::getDestAccessMask() { return VK_ACCESS_MEMORY_READ_BIT; } diff --git a/src/Engine/Graphics/Vulkan/VulkanDescriptorSets.cpp b/src/Engine/Graphics/Vulkan/VulkanDescriptorSets.cpp index 0ea7b0a..0a38918 100644 --- a/src/Engine/Graphics/Vulkan/VulkanDescriptorSets.cpp +++ b/src/Engine/Graphics/Vulkan/VulkanDescriptorSets.cpp @@ -135,10 +135,10 @@ void DescriptorSet::updateBuffer(uint32_t binding, Gfx::PUniformBuffer uniformBu cachedData[binding] = new UniformBuffer(*vulkanBuffer.getHandle()); } -void DescriptorSet::updateBuffer(uint32_t binding, Gfx::PStructuredBuffer structuredBuffer) +void DescriptorSet::updateBuffer(uint32_t binding, Gfx::PShaderBuffer ShaderBuffer) { - PStructuredBuffer vulkanBuffer = structuredBuffer.cast(); - StructuredBuffer* cachedBuffer = reinterpret_cast(cachedData[binding]); + PShaderBuffer vulkanBuffer = ShaderBuffer.cast(); + ShaderBuffer* cachedBuffer = reinterpret_cast(cachedData[binding]); if(vulkanBuffer.getHandle() == cachedBuffer) { return; diff --git a/src/Engine/Graphics/Vulkan/VulkanDescriptorSets.h b/src/Engine/Graphics/Vulkan/VulkanDescriptorSets.h index e8099f8..b801aed 100644 --- a/src/Engine/Graphics/Vulkan/VulkanDescriptorSets.h +++ b/src/Engine/Graphics/Vulkan/VulkanDescriptorSets.h @@ -67,7 +67,7 @@ public: virtual ~DescriptorSet(); virtual void writeChanges(); virtual void updateBuffer(uint32_t binding, Gfx::PUniformBuffer uniformBuffer); - virtual void updateBuffer(uint32_t binding, Gfx::PStructuredBuffer uniformBuffer); + virtual void updateBuffer(uint32_t binding, Gfx::PShaderBuffer uniformBuffer); virtual void updateSampler(uint32_t binding, Gfx::PSamplerState samplerState); virtual void updateTexture(uint32_t binding, Gfx::PTexture texture, Gfx::PSamplerState sampler = nullptr); virtual void updateTextureArray(uint32_t binding, Array texture); diff --git a/src/Engine/Graphics/Vulkan/VulkanGraphics.cpp b/src/Engine/Graphics/Vulkan/VulkanGraphics.cpp index 315d99b..0456bee 100644 --- a/src/Engine/Graphics/Vulkan/VulkanGraphics.cpp +++ b/src/Engine/Graphics/Vulkan/VulkanGraphics.cpp @@ -134,10 +134,10 @@ Gfx::PUniformBuffer Graphics::createUniformBuffer(const UniformBufferCreateInfo return uniformBuffer; } -Gfx::PStructuredBuffer Graphics::createStructuredBuffer(const StructuredBufferCreateInfo &bulkData) +Gfx::PShaderBuffer Graphics::createShaderBuffer(const ShaderBufferCreateInfo &bulkData) { - PStructuredBuffer structuredBuffer = new StructuredBuffer(this, bulkData); - return structuredBuffer; + PShaderBuffer ShaderBuffer = new ShaderBuffer(this, bulkData); + return ShaderBuffer; } Gfx::PVertexBuffer Graphics::createVertexBuffer(const VertexBufferCreateInfo &bulkData) { @@ -269,7 +269,7 @@ void Graphics::copyTexture(Gfx::PTexture srcTexture, Gfx::PTexture dstTexture) { /*VkMemoryRequirements imageRequirements; vkGetImageMemoryRequirements(handle, srcHandle->getImage(), &imageRequirements); - PStructuredBuffer tempBuffer = createStructuredBuffer(); + PShaderBuffer tempBuffer = createShaderBuffer(); VkBufferImageCopy bufferImageCopy; bufferImageCopy.bufferOffset = 0; bufferImageCopy.bufferRowLength = srcTexture->getSizeX(); diff --git a/src/Engine/Graphics/Vulkan/VulkanGraphics.h b/src/Engine/Graphics/Vulkan/VulkanGraphics.h index 96f0c83..fb4db6f 100644 --- a/src/Engine/Graphics/Vulkan/VulkanGraphics.h +++ b/src/Engine/Graphics/Vulkan/VulkanGraphics.h @@ -48,7 +48,7 @@ public: virtual Gfx::PTexture3D createTexture3D(const TextureCreateInfo &createInfo) override; virtual Gfx::PTextureCube createTextureCube(const TextureCreateInfo &createInfo) override; virtual Gfx::PUniformBuffer createUniformBuffer(const UniformBufferCreateInfo &bulkData) override; - virtual Gfx::PStructuredBuffer createStructuredBuffer(const StructuredBufferCreateInfo &bulkData) override; + virtual Gfx::PShaderBuffer createShaderBuffer(const ShaderBufferCreateInfo &bulkData) override; virtual Gfx::PVertexBuffer createVertexBuffer(const VertexBufferCreateInfo &bulkData) override; virtual Gfx::PIndexBuffer createIndexBuffer(const IndexBufferCreateInfo &bulkData) override; virtual Gfx::PRenderCommand createRenderCommand(const std::string& name) override; diff --git a/src/Engine/Graphics/Vulkan/VulkanGraphicsResources.h b/src/Engine/Graphics/Vulkan/VulkanGraphicsResources.h index 38130fc..a185806 100644 --- a/src/Engine/Graphics/Vulkan/VulkanGraphicsResources.h +++ b/src/Engine/Graphics/Vulkan/VulkanGraphicsResources.h @@ -140,11 +140,11 @@ private: }; DEFINE_REF(UniformBuffer) -class StructuredBuffer : public Gfx::StructuredBuffer, public ShaderBuffer +class ShaderBuffer : public Gfx::ShaderBuffer, public ShaderBuffer { public: - StructuredBuffer(PGraphics graphics, const StructuredBufferCreateInfo &resourceData); - virtual ~StructuredBuffer(); + ShaderBuffer(PGraphics graphics, const ShaderBufferCreateInfo &resourceData); + virtual ~ShaderBuffer(); virtual bool updateContents(const BulkResourceData &resourceData); virtual void* lock(bool bWriteOnly = true) override; @@ -161,7 +161,7 @@ protected: private: PStagingBuffer dedicatedStagingBuffer; }; -DEFINE_REF(StructuredBuffer) +DEFINE_REF(ShaderBuffer) class VertexBuffer : public Gfx::VertexBuffer, public ShaderBuffer { diff --git a/src/Engine/Scene/Scene.cpp b/src/Engine/Scene/Scene.cpp index e94011d..cb538fb 100644 --- a/src/Engine/Scene/Scene.cpp +++ b/src/Engine/Scene/Scene.cpp @@ -17,7 +17,7 @@ Scene::Scene(Gfx::PGraphics graphics) , physics(registry) { - StructuredBufferCreateInfo structInfo = { + ShaderBufferCreateInfo structInfo = { .resourceData = { .size = sizeof(Component::DirectionalLight) * MAX_DIRECTIONAL_LIGHTS, .data = nullptr, @@ -25,10 +25,10 @@ Scene::Scene(Gfx::PGraphics graphics) .stride = sizeof(Component::DirectionalLight), .bDynamic = true, }; - lightEnv.directionalLights = graphics->createStructuredBuffer(structInfo); + lightEnv.directionalLights = graphics->createShaderBuffer(structInfo); structInfo.resourceData.size = sizeof(Component::PointLight) * MAX_POINT_LIGHTS; structInfo.stride = sizeof(Component::PointLight); - lightEnv.pointLights = graphics->createStructuredBuffer(structInfo); + lightEnv.pointLights = graphics->createShaderBuffer(structInfo); UniformBufferCreateInfo uniformInfo = { .resourceData = { @@ -87,14 +87,14 @@ Array Scene::getStaticMeshes() } if(sceneDataBuffer == nullptr || sceneDataBuffer->getNumElements() != sceneData.size()) { - StructuredBufferCreateInfo createInfo = StructuredBufferCreateInfo { + ShaderBufferCreateInfo createInfo = ShaderBufferCreateInfo { .resourceData = { .size = sceneData.size() * sizeof(PrimitiveSceneData), .data = nullptr, }, .stride = (uint32)sceneData.size(), }; - sceneDataBuffer = graphics->createStructuredBuffer(createInfo); + sceneDataBuffer = graphics->createShaderBuffer(createInfo); } sceneDataBuffer->updateContents(BulkResourceData { .size = sceneData.size() * sizeof(PrimitiveSceneData), diff --git a/src/Engine/Scene/Scene.h b/src/Engine/Scene/Scene.h index bb5e646..87cad2d 100644 --- a/src/Engine/Scene/Scene.h +++ b/src/Engine/Scene/Scene.h @@ -15,9 +15,9 @@ DECLARE_REF(Entity) #define MAX_POINT_LIGHTS 256 struct LightEnv { - Gfx::PStructuredBuffer directionalLights; + Gfx::PShaderBuffer directionalLights; Gfx::PUniformBuffer numDirectional; - Gfx::PStructuredBuffer pointLights; + Gfx::PShaderBuffer pointLights; Gfx::PUniformBuffer numPoints; }; @@ -58,7 +58,7 @@ public: Array getStaticMeshes(); LightEnv getLightBuffer(); Component::Skybox getSkybox(); - Gfx::PStructuredBuffer getSceneDataBuffer() const { return sceneDataBuffer; } + Gfx::PShaderBuffer getSceneDataBuffer() const { return sceneDataBuffer; } Gfx::PGraphics getGraphics() const { return graphics; } entt::registry registry; private: @@ -69,7 +69,7 @@ private: Vector4 actorLocation; }; Array sceneData; - Gfx::PStructuredBuffer sceneDataBuffer; + Gfx::PShaderBuffer sceneDataBuffer; LightEnv lightEnv; PhysicsSystem physics; Gfx::PGraphics graphics;