Renderer: Add support for cubemaps

This commit is contained in:
Jérôme Leclercq
2021-06-01 12:30:37 +02:00
parent c243217dd8
commit 465837ff12
14 changed files with 201 additions and 41 deletions

View File

@@ -166,6 +166,19 @@ namespace Nz::ShaderLang
return samplerType;
}
else if (identifier == "samplerCube")
{
Consume();
ShaderAst::SamplerType samplerType;
samplerType.dim = ImageType::Cubemap;
Expect(Advance(), TokenType::LessThan); //< '<'
samplerType.sampledType = ParsePrimitiveType();
Expect(Advance(), TokenType::GreatherThan); //< '>'
return samplerType;
}
else if (identifier == "uniform")
{
Consume();

View File

@@ -545,17 +545,32 @@ namespace Nz
auto SpirvConstantCache::BuildType(const ShaderAst::SamplerType& type) const -> TypePtr
{
//TODO
auto imageType = Image{
{}, //< qualifier
{}, //< depth
true, //< sampled
SpirvDim::Dim2D, //< dim
SpirvImageFormat::Unknown, //< format
BuildType(ShaderAst::PrimitiveType::Float32), //< sampledType
false, //< arrayed,
false //< multisampled
};
Image imageType;
imageType.sampled = true;
imageType.sampledType = BuildType(type.sampledType);
switch (type.dim)
{
case ImageType::Cubemap:
imageType.dim = SpirvDim::Cube;
break;
case ImageType::E1D_Array:
imageType.arrayed = true;
case ImageType::E1D:
imageType.dim = SpirvDim::Dim1D;
break;
case ImageType::E2D_Array:
imageType.arrayed = true;
case ImageType::E2D:
imageType.dim = SpirvDim::Dim2D;
break;
case ImageType::E3D:
imageType.dim = SpirvDim::Dim3D;
break;
}
return std::make_shared<Type>(SampledImage{ std::make_shared<Type>(imageType) });
}