spirv: Support initializers on uniforms (#1588)
If a uniform has an initializer it will now be given as the optional initializer operand to the OpVariable instruction. Fixes: https://github.com/KhronosGroup/glslang/issues/1259 Signed-off-by: Neil Roberts <nroberts@igalia.com> (the code) Signed-off-by: Alejandro Piñeiro <apinheiro@igalia.com> (the tests) Signed-off-by: Arcady Goldmints-Orlov <agoldmints@igalia.com> Co-authored-by: Neil Roberts <nroberts@igalia.com>
This commit is contained in:
committed by
GitHub
parent
232ba0d848
commit
ff6dcca575
@@ -3525,7 +3525,18 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol*
|
||||
if (glslang::IsAnonymous(name))
|
||||
name = "";
|
||||
|
||||
return builder.createVariable(storageClass, spvType, name);
|
||||
spv::Id initializer = spv::NoResult;
|
||||
|
||||
if (node->getType().getQualifier().storage == glslang::EvqUniform &&
|
||||
!node->getConstArray().empty()) {
|
||||
int nextConst = 0;
|
||||
initializer = createSpvConstantFromConstUnionArray(node->getType(),
|
||||
node->getConstArray(),
|
||||
nextConst,
|
||||
false /* specConst */);
|
||||
}
|
||||
|
||||
return builder.createVariable(storageClass, spvType, name, initializer);
|
||||
}
|
||||
|
||||
// Return type Id of the sampled type.
|
||||
|
||||
Reference in New Issue
Block a user