Fixing sampler parameters
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
#include "Containers/Array.h"
|
||||
#include "Enums.h"
|
||||
#include "Math/Math.h"
|
||||
#include "Initializer.h"
|
||||
|
||||
namespace Seele {
|
||||
DECLARE_REF(Material)
|
||||
@@ -14,7 +15,9 @@ DECLARE_REF(GraphicsPipeline)
|
||||
DECLARE_REF(ComputePipeline)
|
||||
class Sampler {
|
||||
public:
|
||||
Sampler(SamplerCreateInfo createInfo): samplerInfo(createInfo) {}
|
||||
virtual ~Sampler() {}
|
||||
SamplerCreateInfo samplerInfo;
|
||||
};
|
||||
DEFINE_REF(Sampler)
|
||||
|
||||
|
||||
@@ -285,27 +285,7 @@ Gfx::PComputePipeline Graphics::createComputePipeline(Gfx::ComputePipelineCreate
|
||||
}
|
||||
|
||||
Gfx::OSampler Graphics::createSampler(const SamplerCreateInfo& createInfo) {
|
||||
VkSamplerCreateInfo vkInfo = {
|
||||
.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
|
||||
.pNext = nullptr,
|
||||
.flags = createInfo.flags,
|
||||
.magFilter = cast(createInfo.magFilter),
|
||||
.minFilter = cast(createInfo.minFilter),
|
||||
.mipmapMode = cast(createInfo.mipmapMode),
|
||||
.addressModeU = cast(createInfo.addressModeU),
|
||||
.addressModeV = cast(createInfo.addressModeV),
|
||||
.addressModeW = cast(createInfo.addressModeW),
|
||||
.mipLodBias = createInfo.mipLodBias,
|
||||
.anisotropyEnable = createInfo.anisotropyEnable,
|
||||
.maxAnisotropy = createInfo.maxAnisotropy,
|
||||
.compareEnable = createInfo.compareEnable,
|
||||
.compareOp = cast(createInfo.compareOp),
|
||||
.minLod = createInfo.minLod,
|
||||
.maxLod = createInfo.maxLod,
|
||||
.borderColor = cast(createInfo.borderColor),
|
||||
.unnormalizedCoordinates = createInfo.unnormalizedCoordinates,
|
||||
};
|
||||
return new Sampler(this, vkInfo);
|
||||
return new Sampler(this, createInfo);
|
||||
}
|
||||
|
||||
Gfx::ODescriptorLayout Graphics::createDescriptorLayout(const std::string& name) { return new DescriptorLayout(this, name); }
|
||||
|
||||
@@ -110,13 +110,33 @@ void DestructionManager::notifyCommandComplete() {
|
||||
}
|
||||
}
|
||||
|
||||
SamplerHandle::SamplerHandle(PGraphics graphics, VkSamplerCreateInfo createInfo) : CommandBoundResource(graphics, "Sampler") {
|
||||
vkCreateSampler(graphics->getDevice(), &createInfo, nullptr, &sampler);
|
||||
SamplerHandle::SamplerHandle(PGraphics graphics, SamplerCreateInfo createInfo) : CommandBoundResource(graphics, "Sampler") {
|
||||
VkSamplerCreateInfo vkInfo = {
|
||||
.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
|
||||
.pNext = nullptr,
|
||||
.flags = createInfo.flags,
|
||||
.magFilter = cast(createInfo.magFilter),
|
||||
.minFilter = cast(createInfo.minFilter),
|
||||
.mipmapMode = cast(createInfo.mipmapMode),
|
||||
.addressModeU = cast(createInfo.addressModeU),
|
||||
.addressModeV = cast(createInfo.addressModeV),
|
||||
.addressModeW = cast(createInfo.addressModeW),
|
||||
.mipLodBias = createInfo.mipLodBias,
|
||||
.anisotropyEnable = createInfo.anisotropyEnable,
|
||||
.maxAnisotropy = createInfo.maxAnisotropy,
|
||||
.compareEnable = createInfo.compareEnable,
|
||||
.compareOp = cast(createInfo.compareOp),
|
||||
.minLod = createInfo.minLod,
|
||||
.maxLod = createInfo.maxLod,
|
||||
.borderColor = cast(createInfo.borderColor),
|
||||
.unnormalizedCoordinates = createInfo.unnormalizedCoordinates,
|
||||
};
|
||||
vkCreateSampler(graphics->getDevice(), &vkInfo, nullptr, &sampler);
|
||||
}
|
||||
|
||||
SamplerHandle::~SamplerHandle() { vkDestroySampler(graphics->getDevice(), sampler, nullptr); }
|
||||
|
||||
Sampler::Sampler(PGraphics graphics, VkSamplerCreateInfo createInfo)
|
||||
: graphics(graphics), handle(new SamplerHandle(graphics, createInfo)) {}
|
||||
Sampler::Sampler(PGraphics graphics, SamplerCreateInfo createInfo)
|
||||
: Gfx::Sampler(createInfo), graphics(graphics), handle(new SamplerHandle(graphics, createInfo)) {}
|
||||
|
||||
Sampler::~Sampler() { graphics->getDestructionManager()->queueResourceForDestruction(std::move(handle)); }
|
||||
|
||||
@@ -106,7 +106,7 @@ DEFINE_REF(DestructionManager)
|
||||
|
||||
class SamplerHandle : public CommandBoundResource {
|
||||
public:
|
||||
SamplerHandle(PGraphics graphics, VkSamplerCreateInfo createInfo);
|
||||
SamplerHandle(PGraphics graphics, SamplerCreateInfo createInfo);
|
||||
virtual ~SamplerHandle();
|
||||
VkSampler sampler;
|
||||
};
|
||||
@@ -114,7 +114,7 @@ DEFINE_REF(SamplerHandle)
|
||||
|
||||
class Sampler : public Gfx::Sampler {
|
||||
public:
|
||||
Sampler(PGraphics graphics, VkSamplerCreateInfo createInfo);
|
||||
Sampler(PGraphics graphics, SamplerCreateInfo createInfo);
|
||||
virtual ~Sampler();
|
||||
PSamplerHandle getHandle() const { return handle; }
|
||||
VkSampler getSampler() const { return handle->sampler; }
|
||||
|
||||
@@ -69,12 +69,9 @@ FloatParameter::FloatParameter(std::string name, float data, uint32 index) : Sha
|
||||
|
||||
FloatParameter::~FloatParameter() {}
|
||||
|
||||
void FloatParameter::updateDescriptorSet(uint32, uint32, uint32 floatOffset) {
|
||||
Material::updateFloatData(floatOffset + index, 1, &data);
|
||||
}
|
||||
void FloatParameter::updateDescriptorSet(uint32, uint32, uint32 floatOffset) { Material::updateFloatData(floatOffset + index, 1, &data); }
|
||||
|
||||
std::string FloatParameter::evaluate(Map<std::string, std::string>& varState) const
|
||||
{
|
||||
std::string FloatParameter::evaluate(Map<std::string, std::string>& varState) const {
|
||||
std::string varName = fmt::format("exp_{}", key);
|
||||
varState[key] = varName;
|
||||
return fmt::format("let {} = getMaterialFloatParameter({});\n", varName, index);
|
||||
@@ -90,8 +87,7 @@ void FloatParameter::load(ArchiveBuffer& buffer) {
|
||||
Serialization::load(buffer, data);
|
||||
}
|
||||
|
||||
VectorParameter::VectorParameter(std::string name, Vector data, uint32 index)
|
||||
: ShaderParameter(name, index), data(data) {
|
||||
VectorParameter::VectorParameter(std::string name, Vector data, uint32 index) : ShaderParameter(name, index), data(data) {
|
||||
output.name = name;
|
||||
output.type = ExpressionType::FLOAT3;
|
||||
}
|
||||
@@ -99,7 +95,7 @@ VectorParameter::VectorParameter(std::string name, Vector data, uint32 index)
|
||||
VectorParameter::~VectorParameter() {}
|
||||
|
||||
void VectorParameter::updateDescriptorSet(uint32, uint32, uint32 floatOffset) {
|
||||
Material::updateFloatData(floatOffset + index, 3, (float*) & data);
|
||||
Material::updateFloatData(floatOffset + index, 3, (float*)&data);
|
||||
}
|
||||
|
||||
std::string VectorParameter::evaluate(Map<std::string, std::string>& varState) const {
|
||||
@@ -158,9 +154,7 @@ SamplerParameter::SamplerParameter(std::string name, Gfx::OSampler sampler, uint
|
||||
|
||||
SamplerParameter::~SamplerParameter() {}
|
||||
|
||||
void SamplerParameter::updateDescriptorSet(uint32, uint32 samplerOffset, uint32) {
|
||||
Material::updateSampler(samplerOffset + index, data);
|
||||
}
|
||||
void SamplerParameter::updateDescriptorSet(uint32, uint32 samplerOffset, uint32) { Material::updateSampler(samplerOffset + index, data); }
|
||||
|
||||
std::string SamplerParameter::evaluate(Map<std::string, std::string>& varState) const {
|
||||
std::string varName = fmt::format("exp_{}", key);
|
||||
@@ -168,11 +162,48 @@ std::string SamplerParameter::evaluate(Map<std::string, std::string>& varState)
|
||||
return fmt::format("let {} = getMaterialSamplerParameter({});\n", varName, index);
|
||||
}
|
||||
|
||||
void SamplerParameter::save(ArchiveBuffer& buffer) const { ShaderParameter::save(buffer); }
|
||||
void SamplerParameter::save(ArchiveBuffer& buffer) const {
|
||||
ShaderParameter::save(buffer);
|
||||
Serialization::save(buffer, data->samplerInfo.flags);
|
||||
Serialization::save(buffer, data->samplerInfo.magFilter);
|
||||
Serialization::save(buffer, data->samplerInfo.minFilter);
|
||||
Serialization::save(buffer, data->samplerInfo.mipmapMode);
|
||||
Serialization::save(buffer, data->samplerInfo.addressModeU);
|
||||
Serialization::save(buffer, data->samplerInfo.addressModeV);
|
||||
Serialization::save(buffer, data->samplerInfo.addressModeW);
|
||||
Serialization::save(buffer, data->samplerInfo.mipLodBias);
|
||||
Serialization::save(buffer, data->samplerInfo.anisotropyEnable);
|
||||
Serialization::save(buffer, data->samplerInfo.maxAnisotropy);
|
||||
Serialization::save(buffer, data->samplerInfo.compareEnable);
|
||||
Serialization::save(buffer, data->samplerInfo.compareOp);
|
||||
Serialization::save(buffer, data->samplerInfo.minLod);
|
||||
Serialization::save(buffer, data->samplerInfo.maxLod);
|
||||
Serialization::save(buffer, data->samplerInfo.borderColor);
|
||||
Serialization::save(buffer, data->samplerInfo.unnormalizedCoordinates);
|
||||
Serialization::save(buffer, data->samplerInfo.name);
|
||||
}
|
||||
|
||||
void SamplerParameter::load(ArchiveBuffer& buffer) {
|
||||
ShaderParameter::load(buffer);
|
||||
data = buffer.getGraphics()->createSampler(SamplerCreateInfo{});
|
||||
SamplerCreateInfo samplerInfo;
|
||||
Serialization::load(buffer, samplerInfo.flags);
|
||||
Serialization::load(buffer, samplerInfo.magFilter);
|
||||
Serialization::load(buffer, samplerInfo.minFilter);
|
||||
Serialization::load(buffer, samplerInfo.mipmapMode);
|
||||
Serialization::load(buffer, samplerInfo.addressModeU);
|
||||
Serialization::load(buffer, samplerInfo.addressModeV);
|
||||
Serialization::load(buffer, samplerInfo.addressModeW);
|
||||
Serialization::load(buffer, samplerInfo.mipLodBias);
|
||||
Serialization::load(buffer, samplerInfo.anisotropyEnable);
|
||||
Serialization::load(buffer, samplerInfo.maxAnisotropy);
|
||||
Serialization::load(buffer, samplerInfo.compareEnable);
|
||||
Serialization::load(buffer, samplerInfo.compareOp);
|
||||
Serialization::load(buffer, samplerInfo.minLod);
|
||||
Serialization::load(buffer, samplerInfo.maxLod);
|
||||
Serialization::load(buffer, samplerInfo.borderColor);
|
||||
Serialization::load(buffer, samplerInfo.unnormalizedCoordinates);
|
||||
Serialization::load(buffer, samplerInfo.name);
|
||||
data = buffer.getGraphics()->createSampler(samplerInfo);
|
||||
}
|
||||
|
||||
CombinedTextureParameter::CombinedTextureParameter(std::string name, PTextureAsset data, Gfx::OSampler sampler, uint32 index)
|
||||
@@ -183,7 +214,7 @@ CombinedTextureParameter::CombinedTextureParameter(std::string name, PTextureAss
|
||||
|
||||
CombinedTextureParameter::~CombinedTextureParameter() {}
|
||||
|
||||
void CombinedTextureParameter::updateDescriptorSet(uint32 , uint32 , uint32 ) { assert(false); }
|
||||
void CombinedTextureParameter::updateDescriptorSet(uint32, uint32, uint32) { assert(false); }
|
||||
|
||||
std::string CombinedTextureParameter::evaluate(Map<std::string, std::string>&) const { return ""; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user