Commit 53864846 by John Kessenich

HLSL: Support empty {} initializers for arrays and scalars.

parent 807a0d9e
...@@ -25,5 +25,9 @@ outs PixelShaderFunction(float4 input) : COLOR0 ...@@ -25,5 +25,9 @@ outs PixelShaderFunction(float4 input) : COLOR0
o4.c = o1.c; o4.c = o1.c;
Nest nest = (Nest)0; Nest nest = (Nest)0;
float2 gf2a[4] = { };
int cgi = { };
o4.b = gf2a[2].y * cgi;
return o4; return o4;
} }
\ No newline at end of file
...@@ -2,5 +2,5 @@ ...@@ -2,5 +2,5 @@
// For the version, it uses the latest git tag followed by the number of commits. // For the version, it uses the latest git tag followed by the number of commits.
// For the date, it uses the current date (when then script is run). // For the date, it uses the current date (when then script is run).
#define GLSLANG_REVISION "Overload400-PrecQual.1721" #define GLSLANG_REVISION "Overload400-PrecQual.1725"
#define GLSLANG_DATE "21-Dec-2016" #define GLSLANG_DATE "30-Dec-2016"
...@@ -4960,12 +4960,16 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co ...@@ -4960,12 +4960,16 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
// edit array sizes to fill in unsized dimensions // edit array sizes to fill in unsized dimensions
if (type.isImplicitlySizedArray()) if (type.isImplicitlySizedArray())
arrayType.changeOuterArraySize((int)initList->getSequence().size()); arrayType.changeOuterArraySize((int)initList->getSequence().size());
TIntermTyped* firstInit = initList->getSequence()[0]->getAsTyped();
if (arrayType.isArrayOfArrays() && firstInit->getType().isArray() && // set unsized array dimensions that can be derived from the initializer's first element
arrayType.getArraySizes().getNumDims() == firstInit->getType().getArraySizes()->getNumDims() + 1) { if (arrayType.isArrayOfArrays() && initList->getSequence().size() > 0) {
for (int d = 1; d < arrayType.getArraySizes().getNumDims(); ++d) { TIntermTyped* firstInit = initList->getSequence()[0]->getAsTyped();
if (arrayType.getArraySizes().getDimSize(d) == UnsizedArraySize) if (firstInit->getType().isArray() &&
arrayType.getArraySizes().setDimSize(d, firstInit->getType().getArraySizes()->getDimSize(d - 1)); arrayType.getArraySizes().getNumDims() == firstInit->getType().getArraySizes()->getNumDims() + 1) {
for (int d = 1; d < arrayType.getArraySizes().getNumDims(); ++d) {
if (arrayType.getArraySizes().getDimSize(d) == UnsizedArraySize)
arrayType.getArraySizes().setDimSize(d, firstInit->getType().getArraySizes()->getDimSize(d - 1));
}
} }
} }
...@@ -5024,6 +5028,9 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co ...@@ -5024,6 +5028,9 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
return nullptr; return nullptr;
} }
} else if (type.isScalar()) { } else if (type.isScalar()) {
// lengthen list to be long enough
lengthenList(loc, initList->getSequence(), 1);
if ((int)initList->getSequence().size() != 1) { if ((int)initList->getSequence().size() != 1) {
error(loc, "scalar expected one element:", "initializer list", type.getCompleteString().c_str()); error(loc, "scalar expected one element:", "initializer list", type.getCompleteString().c_str());
return nullptr; return nullptr;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment