Fix #1720: Give an error for parameter mismatched image format.
This commit is contained in:
parent
0e5d1bb66a
commit
08d61df040
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 {
|
||||||
|
@ -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);
|
||||||
|
@ -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");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user