Reducing memory usage

This commit is contained in:
Dynamitos
2024-08-07 21:19:33 +02:00
parent 819b541ff2
commit 64a26bfd57
37 changed files with 216 additions and 44 deletions
+21
View File
@@ -181,3 +181,24 @@ void Material::compile() {
codeStream << "};\n";
graphics->getShaderCompiler()->registerMaterial(this);
}
uint64 Material::getCPUSize() const {
uint64 result = sizeof(Material);
for (size_t i = 0; i < parameters.size(); ++i) {
result += parameters[i].size();
}
for (const auto& expr : codeExpressions)
{
result += expr->getCPUSize();
}
return result;
}
uint64 Material::getGPUSize() const
{
uint64 result = 0;
for (const auto& expr : codeExpressions) {
result += expr->getGPUSize();
}
return result;
}
+3
View File
@@ -40,6 +40,9 @@ class Material {
void compile();
uint64 getCPUSize() const;
uint64 getGPUSize() const;
private:
Gfx::PGraphics graphics;
uint32 numTextures;
+17 -4
View File
@@ -2,7 +2,6 @@
#include "Graphics/Graphics.h"
#include "Material.h"
using namespace Seele;
MaterialInstance::MaterialInstance() {}
@@ -34,9 +33,7 @@ void MaterialInstance::updateDescriptor() {
}
}
void MaterialInstance::setBaseMaterial(PMaterialAsset asset) {
baseMaterial = asset;
}
void MaterialInstance::setBaseMaterial(PMaterialAsset asset) { baseMaterial = asset; }
void MaterialInstance::save(ArchiveBuffer& buffer) const {
Serialization::save(buffer, numTextures);
@@ -56,3 +53,19 @@ void MaterialInstance::load(ArchiveBuffer& buffer) {
samplersOffset = Material::addSamplers(numSamplers);
floatBufferOffset = Material::addFloats(numFloats);
}
uint64 MaterialInstance::getCPUSize() const {
uint64 result = sizeof(MaterialInstance);
for (size_t i = 0; i < parameters.size(); ++i) {
result += parameters[i]->getCPUSize();
}
return result;
}
uint64 MaterialInstance::getGPUSize() const {
uint64 result = 0;
for (size_t i = 0; i < parameters.size(); ++i) {
result += parameters[i]->getGPUSize();
}
return result;
}
+3
View File
@@ -31,6 +31,9 @@ class MaterialInstance {
void save(ArchiveBuffer& buffer) const;
void load(ArchiveBuffer& buffer);
uint64 getCPUSize() const;
uint64 getGPUSize() const;
private:
Gfx::PGraphics graphics;
Array<OShaderParameter> parameters;
+14
View File
@@ -37,6 +37,8 @@ class ShaderExpression {
ShaderExpression(std::string key);
virtual ~ShaderExpression();
virtual uint64 getIdentifier() const = 0;
virtual uint64 getCPUSize() const { return 0; };
virtual uint64 getGPUSize() const { return 0; };
virtual std::string evaluate(Map<std::string, std::string>& varState) const = 0;
virtual void save(ArchiveBuffer& buffer) const;
virtual void load(ArchiveBuffer& buffer);
@@ -50,6 +52,8 @@ struct ShaderParameter : public ShaderExpression {
virtual ~ShaderParameter();
virtual void updateDescriptorSet(uint32 textureOffset, uint32 samplerOffset, uint32 floatOffset) = 0;
virtual uint64 getIdentifier() const override = 0;
virtual uint64 getCPUSize() const override = 0;
virtual uint64 getGPUSize() const override = 0;
virtual std::string evaluate(Map<std::string, std::string>& varState) const = 0;
virtual void save(ArchiveBuffer& buffer) const override;
virtual void load(ArchiveBuffer& buffer) override;
@@ -64,6 +68,8 @@ struct FloatParameter : public ShaderParameter {
virtual void updateDescriptorSet(uint32 textureOffset, uint32 samplerOffset, uint32 floatOffset) override;
virtual std::string evaluate(Map<std::string, std::string>& varState) const override;
virtual uint64 getIdentifier() const override { return IDENTIFIER; }
virtual uint64 getCPUSize() const { return sizeof(FloatParameter); }
virtual uint64 getGPUSize() const { return sizeof(float); }
virtual void save(ArchiveBuffer& buffer) const override;
virtual void load(ArchiveBuffer& buffer) override;
};
@@ -77,6 +83,8 @@ struct VectorParameter : public ShaderParameter {
virtual void updateDescriptorSet(uint32 textureOffset, uint32 samplerOffset, uint32 floatOffset) override;
virtual std::string evaluate(Map<std::string, std::string>& varState) const override;
virtual uint64 getIdentifier() const override { return IDENTIFIER; }
virtual uint64 getCPUSize() const { return sizeof(VectorParameter); }
virtual uint64 getGPUSize() const { return sizeof(Vector); }
virtual void save(ArchiveBuffer& buffer) const override;
virtual void load(ArchiveBuffer& buffer) override;
};
@@ -90,6 +98,8 @@ struct TextureParameter : public ShaderParameter {
virtual void updateDescriptorSet(uint32 textureOffset, uint32 samplerOffset, uint32 floatOffset) override;
virtual std::string evaluate(Map<std::string, std::string>& varState) const override;
virtual uint64 getIdentifier() const override { return IDENTIFIER; }
virtual uint64 getCPUSize() const { return sizeof(TextureParameter); }
virtual uint64 getGPUSize() const { return sizeof(void*); } // TODO: technically this is just a ref, but idk
virtual void save(ArchiveBuffer& buffer) const override;
virtual void load(ArchiveBuffer& buffer) override;
};
@@ -104,6 +114,8 @@ struct SamplerParameter : public ShaderParameter {
virtual void updateDescriptorSet(uint32 textureOffset, uint32 samplerOffset, uint32 floatOffset) override;
virtual std::string evaluate(Map<std::string, std::string>& varState) const override;
virtual uint64 getIdentifier() const override { return IDENTIFIER; }
virtual uint64 getCPUSize() const { return sizeof(SamplerParameter); }
virtual uint64 getGPUSize() const { return sizeof(void*); }
virtual void save(ArchiveBuffer& buffer) const override;
virtual void load(ArchiveBuffer& buffer) override;
};
@@ -118,6 +130,8 @@ struct CombinedTextureParameter : public ShaderParameter {
virtual void updateDescriptorSet(uint32 textureOffset, uint32 samplerOffset, uint32 floatOffset) override;
virtual std::string evaluate(Map<std::string, std::string>& varState) const override;
virtual uint64 getIdentifier() const override { return IDENTIFIER; }
virtual uint64 getCPUSize() const { return sizeof(CombinedTextureParameter); }
virtual uint64 getGPUSize() const { return sizeof(void*); }
virtual void save(ArchiveBuffer& buffer) const override;
virtual void load(ArchiveBuffer& buffer) override;
};