Fix #1720: Give an error for parameter mismatched image format.

This commit is contained in:
John Kessenich 2019-04-19 04:47:03 -06:00
parent 0e5d1bb66a
commit 08d61df040
10 changed files with 82 additions and 83 deletions

View File

@ -106,9 +106,9 @@ layout(r32i) coherent restrict readonly uniform iimage2D qualim2;
void passrc() void passrc()
{ {
passr(qualim1); passr(qualim1); // ERROR, changing formats
passr(qualim2); // ERROR, drops restrict passr(qualim2); // ERROR, drops restrict, ERROR, changing formats
passr(iimg2D); passr(iimg2D); // ERROR, changing formats
} }
highp layout(rg8i) uniform readonly uimage2D i1bad; // ERROR, type mismatch highp layout(rg8i) uniform readonly uimage2D i1bad; // ERROR, type mismatch

View File

@ -131,9 +131,9 @@ layout(r32i) coherent volatile readonly uniform iimage2D qualim2;
void passrc() void passrc()
{ {
passr(qualim1); passr(qualim1); // ERROR, changing formats
passr(qualim2); // ERROR, drops volatile passr(qualim2); // ERROR, drops volatile, ERROR, changing formats
passr(iimg2D); passr(iimg2D); // ERROR, changing formats
} }
layout(rg8i) uniform uimage2D i1bad; // ERROR, type mismatch layout(rg8i) uniform uimage2D i1bad; // ERROR, type mismatch

View File

@ -28,6 +28,9 @@ ERROR: 0:90: 'imageAtomicMax' : no matching overloaded function found
ERROR: 0:94: 'writeonly' : argument cannot drop memory qualifier when passed to formal parameter ERROR: 0:94: 'writeonly' : argument cannot drop memory qualifier when passed to formal parameter
ERROR: 0:97: '' : memory qualifiers cannot be used on this type ERROR: 0:97: '' : memory qualifiers cannot be used on this type
ERROR: 0:98: '' : memory qualifiers cannot be used on this type ERROR: 0:98: '' : memory qualifiers cannot be used on this type
ERROR: 0:109: 'format' : image formats must match
ERROR: 0:110: 'format' : image formats must match
ERROR: 0:111: 'format' : image formats must match
ERROR: 0:114: 'image load-store format' : not supported with this profile: es ERROR: 0:114: 'image load-store format' : not supported with this profile: es
ERROR: 0:114: 'rg8i' : does not apply to unsigned integer images ERROR: 0:114: 'rg8i' : does not apply to unsigned integer images
ERROR: 0:115: 'rgba32i' : does not apply to floating point images ERROR: 0:115: 'rgba32i' : does not apply to floating point images
@ -83,7 +86,7 @@ WARNING: 0:238: '#define' : names containing consecutive underscores are reserve
ERROR: 0:244: 'gl_DeviceIndex' : required extension not requested: GL_EXT_device_group ERROR: 0:244: 'gl_DeviceIndex' : required extension not requested: GL_EXT_device_group
ERROR: 0:245: 'gl_ViewIndex' : undeclared identifier ERROR: 0:245: 'gl_ViewIndex' : undeclared identifier
ERROR: 0:255: 'gl_ViewIndex' : undeclared identifier ERROR: 0:255: 'gl_ViewIndex' : undeclared identifier
ERROR: 82 compilation errors. No code generated. ERROR: 85 compilation errors. No code generated.
Shader version: 310 Shader version: 310

View File

@ -38,7 +38,10 @@ ERROR: 0:115: 'imageAtomicMax' : no matching overloaded function found
ERROR: 0:119: 'writeonly' : argument cannot drop memory qualifier when passed to formal parameter ERROR: 0:119: 'writeonly' : argument cannot drop memory qualifier when passed to formal parameter
ERROR: 0:122: '' : memory qualifiers cannot be used on this type ERROR: 0:122: '' : memory qualifiers cannot be used on this type
ERROR: 0:123: '' : memory qualifiers cannot be used on this type ERROR: 0:123: '' : memory qualifiers cannot be used on this type
ERROR: 0:134: 'format' : image formats must match
ERROR: 0:135: 'volatile' : argument cannot drop memory qualifier when passed to formal parameter ERROR: 0:135: 'volatile' : argument cannot drop memory qualifier when passed to formal parameter
ERROR: 0:135: 'format' : image formats must match
ERROR: 0:136: 'format' : image formats must match
ERROR: 0:139: 'rg8i' : does not apply to unsigned integer images ERROR: 0:139: 'rg8i' : does not apply to unsigned integer images
ERROR: 0:140: 'rgba32i' : does not apply to floating point images ERROR: 0:140: 'rgba32i' : does not apply to floating point images
ERROR: 0:141: 'rgba32f' : does not apply to unsigned integer images ERROR: 0:141: 'rgba32f' : does not apply to unsigned integer images
@ -52,7 +55,7 @@ ERROR: 0:157: 'assign' : cannot convert from ' const float' to ' temp int'
ERROR: 0:158: 'textureQueryLevels' : no matching overloaded function found ERROR: 0:158: 'textureQueryLevels' : no matching overloaded function found
ERROR: 0:158: 'assign' : cannot convert from ' const float' to ' temp int' ERROR: 0:158: 'assign' : cannot convert from ' const float' to ' temp int'
WARNING: 0:161: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array WARNING: 0:161: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array
ERROR: 51 compilation errors. No code generated. ERROR: 54 compilation errors. No code generated.
Shader version: 420 Shader version: 420

View File

@ -30,8 +30,10 @@ ERROR: 0:132: 'shared' : not supported in this stage: vertex
ERROR: 0:134: '' : function does not return a value: funcA ERROR: 0:134: '' : function does not return a value: funcA
ERROR: 0:136: '' : function does not return a value: funcB ERROR: 0:136: '' : function does not return a value: funcB
ERROR: 0:153: '' : function does not return a value: func3 ERROR: 0:153: '' : function does not return a value: func3
ERROR: 0:169: 'format' : image formats must match
ERROR: 0:170: 'coherent' : argument cannot drop memory qualifier when passed to formal parameter ERROR: 0:170: 'coherent' : argument cannot drop memory qualifier when passed to formal parameter
ERROR: 32 compilation errors. No code generated. ERROR: 0:170: 'format' : image formats must match
ERROR: 34 compilation errors. No code generated.
Shader version: 430 Shader version: 430

View File

@ -31,8 +31,10 @@ ERROR: 0:132: 'shared' : not supported in this stage: vertex
ERROR: 0:134: '' : function does not return a value: funcA ERROR: 0:134: '' : function does not return a value: funcA
ERROR: 0:136: '' : function does not return a value: funcB ERROR: 0:136: '' : function does not return a value: funcB
ERROR: 0:153: '' : function does not return a value: func3 ERROR: 0:153: '' : function does not return a value: func3
ERROR: 0:169: 'format' : image formats must match
ERROR: 0:170: 'coherent' : argument cannot drop memory qualifier when passed to formal parameter ERROR: 0:170: 'coherent' : argument cannot drop memory qualifier when passed to formal parameter
ERROR: 33 compilation errors. No code generated. ERROR: 0:170: 'format' : image formats must match
ERROR: 35 compilation errors. No code generated.
Shader version: 430 Shader version: 430

View File

@ -2,14 +2,14 @@ spv.paramMemory.frag
Validation failed Validation failed
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80007 // Generated by (magic number): 80007
// Id's are bound by 69 // Id's are bound by 64
Capability Shader Capability Shader
Capability StorageImageReadWithoutFormat Capability StorageImageReadWithoutFormat
Capability StorageImageWriteWithoutFormat Capability StorageImageWriteWithoutFormat
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 27 66 EntryPoint Fragment 4 "main" 27 61
ExecutionMode 4 OriginUpperLeft ExecutionMode 4 OriginUpperLeft
Source ESSL 310 Source ESSL 310
Name 4 "main" Name 4 "main"
@ -22,39 +22,28 @@ Validation failed
Name 22 "data" Name 22 "data"
Name 27 "in_coords" Name 27 "in_coords"
Name 35 "read1" Name 35 "read1"
Name 38 "image1" Name 38 "read2"
Name 39 "param" Name 43 "image3"
Name 42 "read2"
Name 45 "image2"
Name 46 "param" Name 46 "param"
Name 49 "image3" Name 48 "param"
Name 53 "param" Name 52 "image4"
Name 55 "param" Name 56 "param"
Name 57 "image4" Name 58 "param"
Name 61 "param" Name 61 "out_color"
Name 63 "param"
Name 66 "out_color"
Decorate 14(image) Coherent Decorate 14(image) Coherent
Decorate 14(image) NonWritable Decorate 14(image) NonWritable
Decorate 20(image) Coherent Decorate 20(image) Coherent
Decorate 20(image) NonReadable Decorate 20(image) NonReadable
Decorate 27(in_coords) Flat Decorate 27(in_coords) Flat
Decorate 27(in_coords) Location 0 Decorate 27(in_coords) Location 0
Decorate 38(image1) DescriptorSet 0 Decorate 43(image3) DescriptorSet 0
Decorate 38(image1) Binding 0 Decorate 43(image3) Binding 1
Decorate 38(image1) Coherent Decorate 43(image3) Coherent
Decorate 38(image1) NonWritable Decorate 43(image3) NonReadable
Decorate 45(image2) DescriptorSet 0 Decorate 52(image4) DescriptorSet 0
Decorate 45(image2) Binding 2 Decorate 52(image4) Binding 3
Decorate 45(image2) NonWritable Decorate 52(image4) NonReadable
Decorate 49(image3) DescriptorSet 0 Decorate 61(out_color) Location 0
Decorate 49(image3) Binding 1
Decorate 49(image3) Coherent
Decorate 49(image3) NonReadable
Decorate 57(image4) DescriptorSet 0
Decorate 57(image4) Binding 3
Decorate 57(image4) NonReadable
Decorate 66(out_color) Location 0
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -69,51 +58,44 @@ Validation failed
19: TypeFunction 2 8(ptr) 11(ptr) 18(ptr) 19: TypeFunction 2 8(ptr) 11(ptr) 18(ptr)
26: TypePointer Input 10(ivec2) 26: TypePointer Input 10(ivec2)
27(in_coords): 26(ptr) Variable Input 27(in_coords): 26(ptr) Variable Input
36: TypeImage 6(float) 2D nonsampled format:Rgba32f 36: 6(float) Constant 1053609165
37: TypePointer UniformConstant 36 37: 12(fvec4) ConstantComposite 36 36 36 36
38(image1): 37(ptr) Variable UniformConstant 39: 6(float) Constant 1056964608
43: TypeImage 6(float) 2D nonsampled format:Rgba16f 40: 12(fvec4) ConstantComposite 39 39 39 39
44: TypePointer UniformConstant 43 41: TypeImage 6(float) 2D nonsampled format:Rgba32f
45(image2): 44(ptr) Variable UniformConstant 42: TypePointer UniformConstant 41
49(image3): 37(ptr) Variable UniformConstant 43(image3): 42(ptr) Variable UniformConstant
51: 6(float) Constant 1056964608 50: TypeImage 6(float) 2D nonsampled format:Rgba16f
57(image4): 44(ptr) Variable UniformConstant 51: TypePointer UniformConstant 50
59: 6(float) Constant 1073741824 52(image4): 51(ptr) Variable UniformConstant
65: TypePointer Output 12(fvec4) 54: 6(float) Constant 1073741824
66(out_color): 65(ptr) Variable Output 60: TypePointer Output 12(fvec4)
67: 6(float) Constant 0 61(out_color): 60(ptr) Variable Output
68: 12(fvec4) ConstantComposite 67 67 67 67 62: 6(float) Constant 0
63: 12(fvec4) ConstantComposite 62 62 62 62
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
35(read1): 18(ptr) Variable Function 35(read1): 18(ptr) Variable Function
39(param): 11(ptr) Variable Function 38(read2): 18(ptr) Variable Function
42(read2): 18(ptr) Variable Function
46(param): 11(ptr) Variable Function 46(param): 11(ptr) Variable Function
53(param): 11(ptr) Variable Function 48(param): 18(ptr) Variable Function
55(param): 18(ptr) Variable Function 56(param): 11(ptr) Variable Function
61(param): 11(ptr) Variable Function 58(param): 18(ptr) Variable Function
63(param): 18(ptr) Variable Function Store 35(read1) 37
40: 10(ivec2) Load 27(in_coords) Store 38(read2) 40
Store 39(param) 40 44: 12(fvec4) Load 35(read1)
41: 12(fvec4) FunctionCall 16(image_load(I21;vi2;) 38(image1) 39(param) 45: 12(fvec4) VectorTimesScalar 44 39
Store 35(read1) 41
47: 10(ivec2) Load 27(in_coords) 47: 10(ivec2) Load 27(in_coords)
Store 46(param) 47 Store 46(param) 47
48: 12(fvec4) FunctionCall 16(image_load(I21;vi2;) 45(image2) 46(param) Store 48(param) 45
Store 42(read2) 48 49: 2 FunctionCall 23(image_store(I21;vi2;vf4;) 43(image3) 46(param) 48(param)
50: 12(fvec4) Load 35(read1) 53: 12(fvec4) Load 38(read2)
52: 12(fvec4) VectorTimesScalar 50 51 55: 12(fvec4) VectorTimesScalar 53 54
54: 10(ivec2) Load 27(in_coords) 57: 10(ivec2) Load 27(in_coords)
Store 53(param) 54 Store 56(param) 57
Store 55(param) 52 Store 58(param) 55
56: 2 FunctionCall 23(image_store(I21;vi2;vf4;) 49(image3) 53(param) 55(param) 59: 2 FunctionCall 23(image_store(I21;vi2;vf4;) 52(image4) 56(param) 58(param)
58: 12(fvec4) Load 42(read2) Store 61(out_color) 63
60: 12(fvec4) VectorTimesScalar 58 59
62: 10(ivec2) Load 27(in_coords)
Store 61(param) 62
Store 63(param) 60
64: 2 FunctionCall 23(image_store(I21;vi2;vf4;) 57(image4) 61(param) 63(param)
Store 66(out_color) 68
Return Return
FunctionEnd FunctionEnd
16(image_load(I21;vi2;): 12(fvec4) Function None 13 16(image_load(I21;vi2;): 12(fvec4) Function None 13

View File

@ -166,8 +166,8 @@ void main()
v.x = func2(a.x, b.x, c.x, d.x); // precise! v.x = func2(a.x, b.x, c.x, d.x); // precise!
func3(a.x * b.x, c.x * d.x, v.x); // precise! func3(a.x * b.x, c.x * d.x, v.x); // precise!
funcA(img1); // OK, adding "restrict" is allowed funcA(img1); // OK, adding "restrict" is allowed, ERROR, changing formats
funcB(img2); // illegal, stripping "coherent" is not funcB(img2); // illegal, stripping "coherent" is not, ERROR, changing formats
{ {
struct light { struct light {

View File

@ -1,7 +1,7 @@
#version 310 es #version 310 es
readonly coherent uniform layout(set = 0, binding = 0, rgba32f) highp image2D image1; // readonly coherent uniform layout(set = 0, binding = 0) highp image2D image1;
readonly uniform layout(set = 0, binding = 2, rgba16f) highp image2D image2; // readonly uniform layout(set = 0, binding = 2) highp image2D image2;
writeonly coherent uniform layout(set = 0, binding = 1, rgba32f) highp image2D image3; writeonly coherent uniform layout(set = 0, binding = 1, rgba32f) highp image2D image3;
writeonly uniform layout(set = 0, binding = 3, rgba16f) highp image2D image4; writeonly uniform layout(set = 0, binding = 3, rgba16f) highp image2D image4;
@ -20,8 +20,8 @@ void image_store(writeonly coherent highp image2D image, highp ivec2 coords, hig
void main() void main()
{ {
highp vec4 read1 = image_load(image1, in_coords); highp vec4 read1 = vec4(0.4); // = image_load(image1, in_coords);
highp vec4 read2 = image_load(image2, in_coords); highp vec4 read2 = vec4(0.5); // = image_load(image2, in_coords);
image_store(image3, in_coords, read1*0.5); image_store(image3, in_coords, read1*0.5);
image_store(image4, in_coords, read2*2.0); image_store(image4, in_coords, read2*2.0);

View File

@ -1157,6 +1157,13 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction
if (argQualifier.writeonly && ! formalQualifier.writeonly) if (argQualifier.writeonly && ! formalQualifier.writeonly)
error(arguments->getLoc(), message, "writeonly", ""); error(arguments->getLoc(), message, "writeonly", "");
} }
if (!builtIn && argQualifier.layoutFormat != formalQualifier.layoutFormat) {
// we have mismatched formats, which should only be allowed if writeonly
// and at least one format is unknown
if (!formalQualifier.writeonly || (formalQualifier.layoutFormat != ElfNone &&
argQualifier.layoutFormat != ElfNone))
error(arguments->getLoc(), "image formats must match", "format", "");
}
if (builtIn && arg->getAsTyped()->getType().containsBasicType(EbtFloat16)) if (builtIn && arg->getAsTyped()->getType().containsBasicType(EbtFloat16))
requireFloat16Arithmetic(arguments->getLoc(), "built-in function", "float16 types can only be in uniform block or buffer storage"); requireFloat16Arithmetic(arguments->getLoc(), "built-in function", "float16 types can only be in uniform block or buffer storage");