--- /dev/null
+hlsl.depthGreater.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+using depth_greater
+0:? Sequence
+0:2 Function Definition: PixelShaderFunction(f1; (global void)
+0:2 Function Parameters:
+0:2 'depth' (out float FragDepth)
+0:? Sequence
+0:3 move second child to first child (temp float)
+0:3 'depth' (out float FragDepth)
+0:3 Constant:
+0:3 0.200000
+0:? Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+using depth_greater
+0:? Sequence
+0:2 Function Definition: PixelShaderFunction(f1; (global void)
+0:2 Function Parameters:
+0:2 'depth' (out float FragDepth)
+0:? Sequence
+0:3 move second child to first child (temp float)
+0:3 'depth' (out float FragDepth)
+0:3 Constant:
+0:3 0.200000
+0:? Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 10
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "PixelShaderFunction" 8
+ ExecutionMode 4 OriginUpperLeft
+ ExecutionMode 4 DepthGreater
+ Name 4 "PixelShaderFunction"
+ Name 8 "depth"
+ Decorate 8(depth) BuiltIn FragDepth
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypePointer Output 6(float)
+ 8(depth): 7(ptr) Variable Output
+ 9: 6(float) Constant 1045220557
+4(PixelShaderFunction): 2 Function None 3
+ 5: Label
+ Store 8(depth) 9
+ Return
+ FunctionEnd
--- /dev/null
+hlsl.depthLess.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+using depth_less
+0:? Sequence
+0:2 Function Definition: PixelShaderFunction( (global float FragDepth)
+0:2 Function Parameters:
+0:? Sequence
+0:3 Sequence
+0:3 move second child to first child (temp float)
+0:? '@entryPointOutput' (out float unknown built-in variable)
+0:3 Constant:
+0:3 0.200000
+0:3 Branch: Return
+0:? Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+using depth_less
+0:? Sequence
+0:2 Function Definition: PixelShaderFunction( (global float FragDepth)
+0:2 Function Parameters:
+0:? Sequence
+0:3 Sequence
+0:3 move second child to first child (temp float)
+0:? '@entryPointOutput' (out float unknown built-in variable)
+0:3 Constant:
+0:3 0.200000
+0:3 Branch: Return
+0:? Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 11
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "PixelShaderFunction" 8
+ ExecutionMode 4 OriginUpperLeft
+ ExecutionMode 4 DepthLess
+ Name 4 "PixelShaderFunction"
+ Name 8 "@entryPointOutput"
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypePointer Output 6(float)
+8(@entryPointOutput): 7(ptr) Variable Output
+ 9: 6(float) Constant 1045220557
+4(PixelShaderFunction): 2 Function None 3
+ 5: Label
+ Store 8(@entryPointOutput) 9
+ Return
+ FunctionEnd
--- /dev/null
+void PixelShaderFunction(out float depth : SV_DepthGreaterEqual)
+{
+ depth = 0.2;
+}
--- /dev/null
+float PixelShaderFunction() : SV_DepthLessEqual
+{
+ return 0.2;
+}
EbvBaryCoordPullModel,
#endif
+ // HLSL built-ins that live only temporarily, until they get remapped
+ // to one of the above.
+ EbvFragDepthGreater,
+ EbvFragDepthLesser,
+
EbvLast
};
// 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).
-#define GLSLANG_REVISION "Overload400-PrecQual.1461"
+#define GLSLANG_REVISION "Overload400-PrecQual.1463"
#define GLSLANG_DATE "02-Sep-2016"
{"hlsl.cast.frag", "PixelShaderFunction"},
{"hlsl.conditional.frag", "PixelShaderFunction"},
{"hlsl.constructexpr.frag", "main"},
+ {"hlsl.depthGreater.frag", "PixelShaderFunction"},
+ {"hlsl.depthLess.frag", "PixelShaderFunction"},
{"hlsl.discard.frag", "PixelShaderFunction"},
{"hlsl.doLoop.frag", "PixelShaderFunction"},
{"hlsl.entry-out.frag", "PixelShaderFunction"},
HlslToken idToken;
while (acceptIdentifier(idToken)) {
// function_parameters
- TFunction* function = new TFunction(idToken.string, type);
- if (acceptFunctionParameters(*function)) {
+ TFunction& function = *new TFunction(idToken.string, type);
+ if (acceptFunctionParameters(function)) {
// post_decls
- acceptPostDecls(type);
+ acceptPostDecls(function.getWritableType());
// compound_statement (function body definition) or just a prototype?
if (peekTokenClass(EHTokLeftBrace)) {
parseContext.error(idToken.loc, "function body can't be in a declarator list", "{", "");
if (typedefDecl)
parseContext.error(idToken.loc, "function body can't be in a typedef", "{", "");
- return acceptFunctionDefinition(*function, node);
+ return acceptFunctionDefinition(function, node);
} else {
if (typedefDecl)
parseContext.error(idToken.loc, "function typedefs not implemented", "{", "");
- parseContext.handleFunctionDeclarator(idToken.loc, *function, true);
+ parseContext.handleFunctionDeclarator(idToken.loc, function, true);
}
} else {
// a variable declaration
unsigned int inCount = 0;
unsigned int outCount = 0;
+ const auto remapBuiltInType = [&](TType& type) {
+ switch (type.getQualifier().builtIn) {
+ case EbvFragDepthGreater:
+ intermediate.setDepth(EldGreater);
+ type.getQualifier().builtIn = EbvFragDepth;
+ break;
+ case EbvFragDepthLesser:
+ intermediate.setDepth(EldLess);
+ type.getQualifier().builtIn = EbvFragDepth;
+ break;
+ default:
+ break;
+ }
+ };
+
// return value is actually a shader-scoped output (out)
if (function.getType().getBasicType() != EbtVoid) {
entryPointOutput = makeInternalVariable("@entryPointOutput", function.getType());
entryPointOutput->getWritableType().getQualifier().layoutLocation = outCount;
outCount += intermediate.computeTypeLocationSize(function.getType());
}
+ remapBuiltInType(function.getWritableType());
}
// parameters are actually shader-scoped inputs and outputs (in or out)
outCount += intermediate.computeTypeLocationSize(*function[i].type);
}
}
+ remapBuiltInType(*function[i].type);
}
}
type.getQualifier().builtIn = EbvFragDepth;
//TODO, these need to get refined to be more specific
- else if( semanticUpperCase == "SV_DEPTHGREATEREQUAL") {
- type.getQualifier().builtIn = EbvFragDepth;
- warn(loc, "depth mode unimplemented", "SV_DEPTHGREATEREQUAL", "");
- } else if( semanticUpperCase == "SV_DEPTHLESSEQUAL") {
- type.getQualifier().builtIn = EbvFragDepth;
- warn(loc, "depth mode unimplemented", "SV_DEPTHLESSEQUAL", "");
- } else if( semanticUpperCase == "SV_STENCILREF")
+ else if( semanticUpperCase == "SV_DEPTHGREATEREQUAL")
+ type.getQualifier().builtIn = EbvFragDepthGreater;
+ else if( semanticUpperCase == "SV_DEPTHLESSEQUAL")
+ type.getQualifier().builtIn = EbvFragDepthLesser;
+ else if( semanticUpperCase == "SV_STENCILREF")
error(loc, "unimplemented", "SV_STENCILREF", "");
else if( semanticUpperCase == "SV_COVERAGE")
error(loc, "unimplemented", "SV_COVERAGE", "");