rendering: formalize shader keyword metadata contract

This commit is contained in:
2026-04-06 18:55:26 +08:00
parent 7acc397714
commit a8b4da16a3
16 changed files with 795 additions and 16 deletions

View File

@@ -11,9 +11,9 @@ namespace XCEngine {
namespace Resources {
constexpr Core::uint32 kTextureArtifactSchemaVersion = 1;
constexpr Core::uint32 kMaterialArtifactSchemaVersion = 2;
constexpr Core::uint32 kMaterialArtifactSchemaVersion = 3;
constexpr Core::uint32 kMeshArtifactSchemaVersion = 2;
constexpr Core::uint32 kShaderArtifactSchemaVersion = 1;
constexpr Core::uint32 kShaderArtifactSchemaVersion = 2;
constexpr Core::uint32 kUIDocumentArtifactSchemaVersion = 2;
struct TextureArtifactHeader {
@@ -46,14 +46,23 @@ struct MeshArtifactHeader {
};
struct MaterialArtifactFileHeader {
char magic[8] = { 'X', 'C', 'M', 'A', 'T', '0', '2', '\0' };
char magic[8] = { 'X', 'C', 'M', 'A', 'T', '0', '3', '\0' };
Core::uint32 schemaVersion = kMaterialArtifactSchemaVersion;
};
struct MaterialArtifactHeaderV2 {
Core::int32 renderQueue = static_cast<Core::int32>(MaterialRenderQueue::Geometry);
MaterialRenderState renderState = {};
Core::uint32 tagCount = 0;
Core::uint32 propertyCount = 0;
Core::uint32 textureBindingCount = 0;
};
struct MaterialArtifactHeader {
Core::int32 renderQueue = static_cast<Core::int32>(MaterialRenderQueue::Geometry);
MaterialRenderState renderState = {};
Core::uint32 tagCount = 0;
Core::uint32 keywordCount = 0;
Core::uint32 propertyCount = 0;
Core::uint32 textureBindingCount = 0;
};
@@ -64,7 +73,7 @@ struct MaterialPropertyArtifact {
};
struct ShaderArtifactFileHeader {
char magic[8] = { 'X', 'C', 'S', 'H', 'D', '0', '1', '\0' };
char magic[8] = { 'X', 'C', 'S', 'H', 'D', '0', '2', '\0' };
Core::uint32 schemaVersion = kShaderArtifactSchemaVersion;
};
@@ -73,9 +82,16 @@ struct ShaderArtifactHeader {
Core::uint32 passCount = 0;
};
struct ShaderPassArtifactHeaderV1 {
Core::uint32 tagCount = 0;
Core::uint32 resourceCount = 0;
Core::uint32 variantCount = 0;
};
struct ShaderPassArtifactHeader {
Core::uint32 tagCount = 0;
Core::uint32 resourceCount = 0;
Core::uint32 keywordDeclarationCount = 0;
Core::uint32 variantCount = 0;
};
@@ -96,6 +112,11 @@ struct ShaderVariantArtifactHeader {
Core::uint64 compiledBinarySize = 0;
};
struct ShaderKeywordDeclarationArtifactHeader {
Core::uint32 declarationType = 0;
Core::uint32 optionCount = 0;
};
struct UIDocumentArtifactFileHeader {
char magic[8] = { 'X', 'C', 'U', 'I', 'D', '0', '1', '\0' };
Core::uint32 schemaVersion = kUIDocumentArtifactSchemaVersion;