Don't try to swizzle void.
This commit is contained in:
parent
856502cb1b
commit
5313613dd1
34
Test/baseResults/invalidSwizzle.vert.out
Normal file
34
Test/baseResults/invalidSwizzle.vert.out
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
invalidSwizzle.vert
|
||||||
|
ERROR: 0:6: 'xx' : does not apply to this type: global void
|
||||||
|
ERROR: 0:7: 'xy' : does not apply to this type: global void
|
||||||
|
ERROR: 2 compilation errors. No code generated.
|
||||||
|
|
||||||
|
|
||||||
|
Shader version: 420
|
||||||
|
ERROR: node is still EOpNull!
|
||||||
|
0:5 Function Definition: main( ( global void)
|
||||||
|
0:5 Function Parameters:
|
||||||
|
0:6 Sequence
|
||||||
|
0:6 Function Call: f( ( global void)
|
||||||
|
0:7 Function Call: f( ( global void)
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? 'gl_VertexID' ( gl_VertexId int VertexId)
|
||||||
|
0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
|
||||||
|
|
||||||
|
|
||||||
|
Linked vertex stage:
|
||||||
|
|
||||||
|
ERROR: Linking vertex stage: No function definition (body) found:
|
||||||
|
f(
|
||||||
|
|
||||||
|
Shader version: 420
|
||||||
|
ERROR: node is still EOpNull!
|
||||||
|
0:5 Function Definition: main( ( global void)
|
||||||
|
0:5 Function Parameters:
|
||||||
|
0:6 Sequence
|
||||||
|
0:6 Function Call: f( ( global void)
|
||||||
|
0:7 Function Call: f( ( global void)
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? 'gl_VertexID' ( gl_VertexId int VertexId)
|
||||||
|
0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
|
||||||
|
|
||||||
8
Test/invalidSwizzle.vert
Normal file
8
Test/invalidSwizzle.vert
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#version 420
|
||||||
|
|
||||||
|
void f();
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
f().xx; // Scalar swizzle does not apply to void
|
||||||
|
f().xy; // Vector swizzle does not apply either
|
||||||
|
}
|
||||||
@ -663,7 +663,7 @@ TIntermTyped* TParseContext::handleDotDereference(const TSourceLoc& loc, TInterm
|
|||||||
// leaving swizzles and struct/block dereferences.
|
// leaving swizzles and struct/block dereferences.
|
||||||
|
|
||||||
TIntermTyped* result = base;
|
TIntermTyped* result = base;
|
||||||
if (base->isVector() || base->isScalar()) {
|
if (base->getBasicType() != EbtVoid && (base->isVector() || base->isScalar())) {
|
||||||
if (base->isScalar()) {
|
if (base->isScalar()) {
|
||||||
const char* dotFeature = "scalar swizzle";
|
const char* dotFeature = "scalar swizzle";
|
||||||
requireProfile(loc, ~EEsProfile, dotFeature);
|
requireProfile(loc, ~EEsProfile, dotFeature);
|
||||||
|
|||||||
@ -188,6 +188,7 @@ INSTANTIATE_TEST_CASE_P(
|
|||||||
"structDeref.frag",
|
"structDeref.frag",
|
||||||
"structure.frag",
|
"structure.frag",
|
||||||
"swizzle.frag",
|
"swizzle.frag",
|
||||||
|
"invalidSwizzle.vert",
|
||||||
"syntaxError.frag",
|
"syntaxError.frag",
|
||||||
"test.frag",
|
"test.frag",
|
||||||
"texture.frag",
|
"texture.frag",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user