Remove legacy shader pass and artifact fallbacks
This commit is contained in:
@@ -48,23 +48,6 @@ bool ReadShaderArtifactString(
|
||||
return true;
|
||||
}
|
||||
|
||||
MaterialRenderState ExpandSerializedMaterialRenderStateV4(const SerializedMaterialRenderStateV4& legacyState) {
|
||||
MaterialRenderState renderState = {};
|
||||
renderState.blendEnable = legacyState.blendEnable;
|
||||
renderState.srcBlend = legacyState.srcBlend;
|
||||
renderState.dstBlend = legacyState.dstBlend;
|
||||
renderState.srcBlendAlpha = legacyState.srcBlendAlpha;
|
||||
renderState.dstBlendAlpha = legacyState.dstBlendAlpha;
|
||||
renderState.blendOp = legacyState.blendOp;
|
||||
renderState.blendOpAlpha = legacyState.blendOpAlpha;
|
||||
renderState.colorWriteMask = legacyState.colorWriteMask;
|
||||
renderState.depthTestEnable = legacyState.depthTestEnable;
|
||||
renderState.depthWriteEnable = legacyState.depthWriteEnable;
|
||||
renderState.depthFunc = legacyState.depthFunc;
|
||||
renderState.cullMode = legacyState.cullMode;
|
||||
return renderState;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
LoadResult LoadShaderArtifact(const Containers::String& path) {
|
||||
@@ -80,13 +63,9 @@ LoadResult LoadShaderArtifact(const Containers::String& path) {
|
||||
}
|
||||
|
||||
const std::string magic(fileHeader.magic, fileHeader.magic + 7);
|
||||
const bool isLegacySchema = magic == "XCSHD01" && fileHeader.schemaVersion == 1u;
|
||||
const bool isSchemaV2 = magic == "XCSHD02" && fileHeader.schemaVersion == 2u;
|
||||
const bool isSchemaV3 = magic == "XCSHD03" && fileHeader.schemaVersion == 3u;
|
||||
const bool isSchemaV4 = magic == "XCSHD04" && fileHeader.schemaVersion == 4u;
|
||||
const bool isCurrentSchema =
|
||||
magic == "XCSHD05" && fileHeader.schemaVersion == kShaderArtifactSchemaVersion;
|
||||
if (!isLegacySchema && !isSchemaV2 && !isSchemaV3 && !isSchemaV4 && !isCurrentSchema) {
|
||||
if (!isCurrentSchema) {
|
||||
return LoadResult("Invalid shader artifact header: " + path);
|
||||
}
|
||||
|
||||
@@ -96,10 +75,7 @@ LoadResult LoadShaderArtifact(const Containers::String& path) {
|
||||
Containers::String shaderSourcePath;
|
||||
Containers::String shaderFallback;
|
||||
if (!ReadShaderArtifactString(data, offset, shaderName) ||
|
||||
!ReadShaderArtifactString(data, offset, shaderSourcePath)) {
|
||||
return LoadResult("Failed to parse shader artifact strings: " + path);
|
||||
}
|
||||
if ((isSchemaV4 || isCurrentSchema) &&
|
||||
!ReadShaderArtifactString(data, offset, shaderSourcePath) ||
|
||||
!ReadShaderArtifactString(data, offset, shaderFallback)) {
|
||||
return LoadResult("Failed to parse shader artifact strings: " + path);
|
||||
}
|
||||
@@ -141,51 +117,18 @@ LoadResult LoadShaderArtifact(const Containers::String& path) {
|
||||
return LoadResult("Failed to read shader artifact passes: " + path);
|
||||
}
|
||||
|
||||
if (isLegacySchema) {
|
||||
ShaderPassArtifactHeaderV1 passHeader = {};
|
||||
if (!ReadShaderArtifactValue(data, offset, passHeader)) {
|
||||
return LoadResult("Failed to read shader artifact passes: " + path);
|
||||
}
|
||||
|
||||
tagCount = passHeader.tagCount;
|
||||
resourceCount = passHeader.resourceCount;
|
||||
variantCount = passHeader.variantCount;
|
||||
} else if (isSchemaV2 || isSchemaV3) {
|
||||
ShaderPassArtifactHeader passHeader = {};
|
||||
if (!ReadShaderArtifactValue(data, offset, passHeader)) {
|
||||
return LoadResult("Failed to read shader artifact passes: " + path);
|
||||
}
|
||||
|
||||
tagCount = passHeader.tagCount;
|
||||
resourceCount = passHeader.resourceCount;
|
||||
keywordDeclarationCount = passHeader.keywordDeclarationCount;
|
||||
variantCount = passHeader.variantCount;
|
||||
} else if (isSchemaV4) {
|
||||
ShaderPassArtifactHeaderV4 passHeader = {};
|
||||
if (!ReadShaderArtifactValue(data, offset, passHeader)) {
|
||||
return LoadResult("Failed to read shader artifact passes: " + path);
|
||||
}
|
||||
|
||||
tagCount = passHeader.tagCount;
|
||||
resourceCount = passHeader.resourceCount;
|
||||
keywordDeclarationCount = passHeader.keywordDeclarationCount;
|
||||
variantCount = passHeader.variantCount;
|
||||
hasFixedFunctionState = passHeader.hasFixedFunctionState;
|
||||
fixedFunctionState = ExpandSerializedMaterialRenderStateV4(passHeader.fixedFunctionState);
|
||||
} else {
|
||||
ShaderPassArtifactHeaderV5 passHeader = {};
|
||||
if (!ReadShaderArtifactValue(data, offset, passHeader)) {
|
||||
return LoadResult("Failed to read shader artifact passes: " + path);
|
||||
}
|
||||
|
||||
tagCount = passHeader.tagCount;
|
||||
resourceCount = passHeader.resourceCount;
|
||||
keywordDeclarationCount = passHeader.keywordDeclarationCount;
|
||||
variantCount = passHeader.variantCount;
|
||||
hasFixedFunctionState = passHeader.hasFixedFunctionState;
|
||||
fixedFunctionState = passHeader.fixedFunctionState;
|
||||
ShaderPassArtifactHeaderV5 passHeader = {};
|
||||
if (!ReadShaderArtifactValue(data, offset, passHeader)) {
|
||||
return LoadResult("Failed to read shader artifact passes: " + path);
|
||||
}
|
||||
|
||||
tagCount = passHeader.tagCount;
|
||||
resourceCount = passHeader.resourceCount;
|
||||
keywordDeclarationCount = passHeader.keywordDeclarationCount;
|
||||
variantCount = passHeader.variantCount;
|
||||
hasFixedFunctionState = passHeader.hasFixedFunctionState;
|
||||
fixedFunctionState = passHeader.fixedFunctionState;
|
||||
|
||||
ShaderPass pass = {};
|
||||
pass.name = passName;
|
||||
pass.hasFixedFunctionState = hasFixedFunctionState != 0u;
|
||||
@@ -244,29 +187,17 @@ LoadResult LoadShaderArtifact(const Containers::String& path) {
|
||||
ShaderStageVariant variant = {};
|
||||
Core::uint64 compiledBinarySize = 0;
|
||||
Core::uint32 keywordCount = 0;
|
||||
if (isSchemaV4 || isCurrentSchema) {
|
||||
ShaderVariantArtifactHeader variantHeader = {};
|
||||
if (!ReadShaderArtifactValue(data, offset, variantHeader)) {
|
||||
return LoadResult("Failed to read shader artifact variants: " + path);
|
||||
}
|
||||
|
||||
variant.stage = static_cast<ShaderType>(variantHeader.stage);
|
||||
variant.language = static_cast<ShaderLanguage>(variantHeader.language);
|
||||
variant.backend = static_cast<ShaderBackend>(variantHeader.backend);
|
||||
keywordCount = variantHeader.keywordCount;
|
||||
compiledBinarySize = variantHeader.compiledBinarySize;
|
||||
} else {
|
||||
ShaderVariantArtifactHeaderV2 variantHeader = {};
|
||||
if (!ReadShaderArtifactValue(data, offset, variantHeader)) {
|
||||
return LoadResult("Failed to read shader artifact variants: " + path);
|
||||
}
|
||||
|
||||
variant.stage = static_cast<ShaderType>(variantHeader.stage);
|
||||
variant.language = static_cast<ShaderLanguage>(variantHeader.language);
|
||||
variant.backend = static_cast<ShaderBackend>(variantHeader.backend);
|
||||
compiledBinarySize = variantHeader.compiledBinarySize;
|
||||
ShaderVariantArtifactHeader variantHeader = {};
|
||||
if (!ReadShaderArtifactValue(data, offset, variantHeader)) {
|
||||
return LoadResult("Failed to read shader artifact variants: " + path);
|
||||
}
|
||||
|
||||
variant.stage = static_cast<ShaderType>(variantHeader.stage);
|
||||
variant.language = static_cast<ShaderLanguage>(variantHeader.language);
|
||||
variant.backend = static_cast<ShaderBackend>(variantHeader.backend);
|
||||
keywordCount = variantHeader.keywordCount;
|
||||
compiledBinarySize = variantHeader.compiledBinarySize;
|
||||
|
||||
if (!ReadShaderArtifactString(data, offset, variant.entryPoint) ||
|
||||
!ReadShaderArtifactString(data, offset, variant.profile) ||
|
||||
!ReadShaderArtifactString(data, offset, variant.sourceCode)) {
|
||||
|
||||
Reference in New Issue
Block a user