0:? 'VertexID' (layout( location=0) in 3-element array of uint)
0:16 move second child to first child ( temp 3-element array of uint)
0:? 'test' ( temp 3-element array of uint)
-0:? 'test' (layout( location=3) in 3-element array of uint)
+0:? 'test' (layout( location=1) in 3-element array of uint)
0:16 Function Call: @main(u1[3];u1[3];struct-PSInput-f1-i11; ( temp void)
0:? 'VertexID' ( temp 3-element array of uint)
0:? 'test' ( temp 3-element array of uint)
0:? 'OutputStream' ( temp structure{ temp float myfloat, temp int something})
0:? Linker Objects
0:? 'VertexID' (layout( location=0) in 3-element array of uint)
-0:? 'test' (layout( location=3) in 3-element array of uint)
+0:? 'test' (layout( location=1) in 3-element array of uint)
Linked geometry stage:
0:? 'VertexID' (layout( location=0) in 3-element array of uint)
0:16 move second child to first child ( temp 3-element array of uint)
0:? 'test' ( temp 3-element array of uint)
-0:? 'test' (layout( location=3) in 3-element array of uint)
+0:? 'test' (layout( location=1) in 3-element array of uint)
0:16 Function Call: @main(u1[3];u1[3];struct-PSInput-f1-i11; ( temp void)
0:? 'VertexID' ( temp 3-element array of uint)
0:? 'test' ( temp 3-element array of uint)
0:? 'OutputStream' ( temp structure{ temp float myfloat, temp int something})
0:? Linker Objects
0:? 'VertexID' (layout( location=0) in 3-element array of uint)
-0:? 'test' (layout( location=3) in 3-element array of uint)
+0:? 'test' (layout( location=1) in 3-element array of uint)
// Module Version 10000
// Generated by (magic number): 80001
Name 53 "param"
Name 55 "param"
Decorate 45(VertexID) Location 0
- Decorate 48(test) Location 3
+ Decorate 48(test) Location 1
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
void HlslParseContext::assignLocations(TVariable& variable)
{
const auto assignLocation = [&](TVariable& variable) {
- const TQualifier& qualifier = variable.getType().getQualifier();
+ const TType& type = variable.getType();
+ const TQualifier& qualifier = type.getQualifier();
if (qualifier.storage == EvqVaryingIn || qualifier.storage == EvqVaryingOut) {
if (qualifier.builtIn == EbvNone) {
+ // Strip off the outer array dimension for those having an extra one.
+ int size;
+ if (type.isArray() && qualifier.isArrayedIo(language)) {
+ TType elementType(type, 0);
+ size = intermediate.computeTypeLocationSize(elementType);
+ } else
+ size = intermediate.computeTypeLocationSize(type);
+
if (qualifier.storage == EvqVaryingIn) {
variable.getWritableType().getQualifier().layoutLocation = nextInLocation;
- nextInLocation += intermediate.computeTypeLocationSize(variable.getType());
+ nextInLocation += size;
} else {
variable.getWritableType().getQualifier().layoutLocation = nextOutLocation;
- nextOutLocation += intermediate.computeTypeLocationSize(variable.getType());
+ nextOutLocation += size;
}
}
ioVariable->getWritableType().setStruct(newLists->second.output);
}
}
- if (storage == EvqVaryingIn)
+ if (storage == EvqVaryingIn) {
correctInput(ioVariable->getWritableType().getQualifier());
- else
+ if (language == EShLangTessEvaluation)
+ if (!ioVariable->getType().isArray())
+ ioVariable->getWritableType().getQualifier().patch = true;
+ } else {
correctOutput(ioVariable->getWritableType().getQualifier());
+ }
ioVariable->getWritableType().getQualifier().storage = storage;
return ioVariable;
};
case EbvStencilRef:
error(loc, "unimplemented; need ARB_shader_stencil_export", "SV_STENCILREF", "");
break;
+ case EbvTessLevelInner:
+ case EbvTessLevelOuter:
+ qualifier.patch = true;
+ break;
default:
break;
}
case EbvTessLevelInner:
case EbvTessLevelOuter:
return language == EShLangTessEvaluation;
+ case EbvTessCoord:
+ return language == EShLangTessEvaluation;
default:
return false;
}