Graphics: Make use of new auto_binding

This commit is contained in:
SirLynix 2022-10-31 22:44:19 +01:00
parent 6b8be23fa0
commit ab154819a7
5 changed files with 42 additions and 35 deletions

View File

@ -33,7 +33,8 @@ namespace Nz
const std::shared_ptr<RenderDevice>& renderDevice = graphics->GetRenderDevice(); const std::shared_ptr<RenderDevice>& renderDevice = graphics->GetRenderDevice();
nzsl::Ast::SanitizeVisitor::Options options; nzsl::Ast::SanitizeVisitor::Options options;
options.allowPartialSanitization = true; options.forceAutoBindingResolve = true;
options.partialSanitization = true;
options.moduleResolver = graphics->GetShaderModuleResolver(); options.moduleResolver = graphics->GetShaderModuleResolver();
options.optionValues[CRC32("MaxLightCount")] = SafeCast<UInt32>(PredefinedLightData::MaxLightCount); options.optionValues[CRC32("MaxLightCount")] = SafeCast<UInt32>(PredefinedLightData::MaxLightCount);
options.optionValues[CRC32("MaxJointCount")] = SafeCast<UInt32>(PredefinedSkeletalData::MaxMatricesCount); options.optionValues[CRC32("MaxJointCount")] = SafeCast<UInt32>(PredefinedSkeletalData::MaxMatricesCount);

View File

@ -43,20 +43,22 @@ struct MaterialSettings
} }
[tag("Material")] [tag("Material")]
[auto_binding]
external external
{ {
[tag("Settings"), binding(0)] settings: uniform[MaterialSettings], [tag("Settings")] settings: uniform[MaterialSettings],
[tag("BaseColorMap"), binding(1)] MaterialBaseColorMap: sampler2D[f32], [tag("BaseColorMap")] MaterialBaseColorMap: sampler2D[f32],
[tag("AlphaMap"), binding(2)] MaterialAlphaMap: sampler2D[f32], [tag("AlphaMap")] MaterialAlphaMap: sampler2D[f32],
} }
[tag("Engine")] [tag("Engine")]
[auto_binding]
external external
{ {
[tag("TextureOverlay"), binding(3)] TextureOverlay: sampler2D[f32], [tag("TextureOverlay")] TextureOverlay: sampler2D[f32],
[tag("InstanceData"), binding(4)] instanceData: uniform[InstanceData], [tag("InstanceData")] instanceData: uniform[InstanceData],
[tag("ViewerData"), binding(5)] viewerData: uniform[ViewerData], [tag("ViewerData")] viewerData: uniform[ViewerData],
[tag("SkeletalData"), binding(6)] skeletalData: uniform[SkeletalData] [tag("SkeletalData")] skeletalData: uniform[SkeletalData]
} }
// Fragment stage // Fragment stage

View File

@ -68,25 +68,27 @@ const PointLight = 1;
const SpotLight = 2; const SpotLight = 2;
[tag("Material")] [tag("Material")]
[auto_binding]
external external
{ {
[tag("Settings"), binding(0)] settings: uniform[MaterialSettings], [tag("Settings")] settings: uniform[MaterialSettings],
[tag("BaseColorMap"), binding(1)] MaterialBaseColorMap: sampler2D[f32], [tag("BaseColorMap")] MaterialBaseColorMap: sampler2D[f32],
[tag("AlphaMap"), binding(2)] MaterialAlphaMap: sampler2D[f32], [tag("AlphaMap")] MaterialAlphaMap: sampler2D[f32],
[tag("EmissiveMap"), binding(3)] MaterialEmissiveMap: sampler2D[f32], [tag("EmissiveMap")] MaterialEmissiveMap: sampler2D[f32],
[tag("HeightMap"), binding(4)] MaterialHeightMap: sampler2D[f32], [tag("HeightMap")] MaterialHeightMap: sampler2D[f32],
[tag("NormalMap"), binding(5)] MaterialNormalMap: sampler2D[f32], [tag("NormalMap")] MaterialNormalMap: sampler2D[f32],
[tag("SpecularMap"), binding(6)] MaterialSpecularMap: sampler2D[f32], [tag("SpecularMap")] MaterialSpecularMap: sampler2D[f32],
} }
[tag("Engine")] [tag("Engine")]
[auto_binding]
external external
{ {
[tag("TextureOverlay"), binding(7)] TextureOverlay: sampler2D[f32], [tag("TextureOverlay")] TextureOverlay: sampler2D[f32],
[tag("InstanceData"), binding(8)] instanceData: uniform[InstanceData], [tag("InstanceData")] instanceData: uniform[InstanceData],
[tag("ViewerData"), binding(9)] viewerData: uniform[ViewerData], [tag("ViewerData")] viewerData: uniform[ViewerData],
[tag("SkeletalData"), binding(10)] skeletalData: uniform[SkeletalData], [tag("SkeletalData")] skeletalData: uniform[SkeletalData],
[tag("LightData"), binding(11)] lightData: uniform[LightData] [tag("LightData")] lightData: uniform[LightData]
} }
struct VertToFrag struct VertToFrag

View File

@ -59,27 +59,29 @@ const PointLight = 1;
const SpotLight = 2; const SpotLight = 2;
[tag("Material")] [tag("Material")]
[auto_binding]
external external
{ {
[tag("Settings"), binding(0)] settings: uniform[MaterialSettings], [tag("Settings")] settings: uniform[MaterialSettings],
[tag("BaseColorMap"), binding(1)] MaterialBaseColorMap: sampler2D[f32], [tag("BaseColorMap")] MaterialBaseColorMap: sampler2D[f32],
[tag("AlphaMap"), binding(2)] MaterialAlphaMap: sampler2D[f32], [tag("AlphaMap")] MaterialAlphaMap: sampler2D[f32],
[tag("EmissiveMap"), binding(3)] MaterialEmissiveMap: sampler2D[f32], [tag("EmissiveMap")] MaterialEmissiveMap: sampler2D[f32],
[tag("HeightMap"), binding(4)] MaterialHeightMap: sampler2D[f32], [tag("HeightMap")] MaterialHeightMap: sampler2D[f32],
[tag("MetallicMap"), binding(5)] MaterialMetallicMap: sampler2D[f32], [tag("MetallicMap")] MaterialMetallicMap: sampler2D[f32],
[tag("NormalMap"), binding(6)] MaterialNormalMap: sampler2D[f32], [tag("NormalMap")] MaterialNormalMap: sampler2D[f32],
[tag("RoughnessMap"), binding(7)] MaterialRoughnessMap: sampler2D[f32], [tag("RoughnessMap")] MaterialRoughnessMap: sampler2D[f32],
[tag("SpecularMap"), binding(8)] MaterialSpecularMap: sampler2D[f32], [tag("SpecularMap")] MaterialSpecularMap: sampler2D[f32],
} }
[tag("Engine")] [tag("Engine")]
[auto_binding]
external external
{ {
[tag("TextureOverlay"), binding(9)] TextureOverlay: sampler2D[f32], [tag("TextureOverlay")] TextureOverlay: sampler2D[f32],
[tag("InstanceData"), binding(10)] instanceData: uniform[InstanceData], [tag("InstanceData")] instanceData: uniform[InstanceData],
[tag("ViewerData"), binding(11)] viewerData: uniform[ViewerData], [tag("ViewerData")] viewerData: uniform[ViewerData],
[tag("SkeletalData"), binding(12)] skeletalData: uniform[SkeletalData], [tag("SkeletalData")] skeletalData: uniform[SkeletalData],
[tag("LightData"), binding(13)] lightData: uniform[LightData] [tag("LightData")] lightData: uniform[LightData]
} }
struct VertToFrag struct VertToFrag

View File

@ -99,7 +99,7 @@ namespace Nz
// Try to partially sanitize shader // Try to partially sanitize shader
nzsl::Ast::SanitizeVisitor::Options sanitizeOptions; nzsl::Ast::SanitizeVisitor::Options sanitizeOptions;
sanitizeOptions.allowPartialSanitization = true; sanitizeOptions.partialSanitization = true;
sanitizeOptions.moduleResolver = Graphics::Instance()->GetShaderModuleResolver(); sanitizeOptions.moduleResolver = Graphics::Instance()->GetShaderModuleResolver();
nzsl::Ast::ModulePtr sanitizedModule = nzsl::Ast::Sanitize(module, sanitizeOptions); nzsl::Ast::ModulePtr sanitizedModule = nzsl::Ast::Sanitize(module, sanitizeOptions);