Commit c47175c7 by John Kessenich

Add memory qualifiers (coherent volatile restrict) to imageSize(), imageLoad(),…

Add memory qualifiers (coherent volatile restrict) to imageSize(), imageLoad(), imageStore(), atomic*(), and imageAtomic*(), to remove errors about dropping qualifiers. Several bugs are related to this, and this is a slightly speculative fix, bit it is certainly wrong to either do it the way it was or to reflect the current specifications. git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@28968 e7fa87d3-cd2b-0410-9028-fcbf551c1848
parent 6ab7bf20
...@@ -62,7 +62,11 @@ void foo23() ...@@ -62,7 +62,11 @@ void foo23()
layout(binding=3) uniform sampler2D s1; layout(binding=3) uniform sampler2D s1;
layout(binding=3) uniform sampler2D s2; // ERROR: overlapping bindings? Don't see that in the 310 spec. layout(binding=3) uniform sampler2D s2; // ERROR: overlapping bindings? Don't see that in the 310 spec.
layout(binding=2) uniform writeonly image2D i2D; layout(binding=2) uniform writeonly image2D i2D;
layout(binding=4) uniform readonly image3D i3D;
layout(binding=5) uniform imageCube iCube;
layout(binding=6) uniform image2DArray i2DA;
layout(binding=6) uniform coherent volatile restrict image2D i2Dqualified;
layout(binding = 1) uniform bb { layout(binding = 1) uniform bb {
int foo; int foo;
...@@ -97,6 +101,10 @@ void foots() ...@@ -97,6 +101,10 @@ void foots()
highp ivec3 v3 = textureSize(isamp2DA, 3); highp ivec3 v3 = textureSize(isamp2DA, 3);
v2 = textureSize(s2dms); v2 = textureSize(s2dms);
v2 = imageSize(i2D); v2 = imageSize(i2D);
v3 = imageSize(i3D);
v2 = imageSize(iCube);
v3 = imageSize(i2DA);
v2 = imageSize(i2Dqualified);
} }
out bool bout; // ERROR out bool bout; // ERROR
......
...@@ -418,29 +418,29 @@ void TBuiltIns::initialize(int version, EProfile profile) ...@@ -418,29 +418,29 @@ void TBuiltIns::initialize(int version, EProfile profile)
if (profile == EEsProfile && version >= 310 || if (profile == EEsProfile && version >= 310 ||
profile != EEsProfile && version >= 430) { profile != EEsProfile && version >= 430) {
commonBuiltins.append( commonBuiltins.append(
"uint atomicAdd(coherent inout uint, uint);" "uint atomicAdd(coherent volatile restrict inout uint, uint);"
" int atomicAdd(coherent inout int, int);" " int atomicAdd(coherent volatile restrict inout int, int);"
"uint atomicMin(coherent inout uint, uint);" "uint atomicMin(coherent volatile restrict inout uint, uint);"
" int atomicMin(coherent inout int, int);" " int atomicMin(coherent volatile restrict inout int, int);"
"uint atomicMax(coherent inout uint, uint);" "uint atomicMax(coherent volatile restrict inout uint, uint);"
" int atomicMax(coherent inout int, int);" " int atomicMax(coherent volatile restrict inout int, int);"
"uint atomicAnd(coherent inout uint, uint);" "uint atomicAnd(coherent volatile restrict inout uint, uint);"
" int atomicAnd(coherent inout int, int);" " int atomicAnd(coherent volatile restrict inout int, int);"
"uint atomicOr (coherent inout uint, uint);" "uint atomicOr (coherent volatile restrict inout uint, uint);"
" int atomicOr (coherent inout int, int);" " int atomicOr (coherent volatile restrict inout int, int);"
"uint atomicXor(coherent inout uint, uint);" "uint atomicXor(coherent volatile restrict inout uint, uint);"
" int atomicXor(coherent inout int, int);" " int atomicXor(coherent volatile restrict inout int, int);"
"uint atomicExchange(coherent inout uint, uint);" "uint atomicExchange(coherent volatile restrict inout uint, uint);"
" int atomicExchange(coherent inout int, int);" " int atomicExchange(coherent volatile restrict inout int, int);"
"uint atomicCompSwap(coherent inout uint, uint, uint);" "uint atomicCompSwap(coherent volatile restrict inout uint, uint, uint);"
" int atomicCompSwap(coherent inout int, int, int);" " int atomicCompSwap(coherent volatile restrict inout int, int, int);"
"\n"); "\n");
} }
...@@ -1847,7 +1847,7 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, TString& typeName, int versi ...@@ -1847,7 +1847,7 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, TString& typeName, int versi
commonBuiltins.append(postfixes[dims]); commonBuiltins.append(postfixes[dims]);
} }
if (sampler.image) if (sampler.image)
commonBuiltins.append(" imageSize("); commonBuiltins.append(" imageSize(readonly writeonly volatile coherent restrict ");
else else
commonBuiltins.append(" textureSize("); commonBuiltins.append(" textureSize(");
commonBuiltins.append(typeName); commonBuiltins.append(typeName);
...@@ -1889,11 +1889,11 @@ void TBuiltIns::addImageFunctions(TSampler sampler, TString& typeName, int versi ...@@ -1889,11 +1889,11 @@ void TBuiltIns::addImageFunctions(TSampler sampler, TString& typeName, int versi
imageParams.append(", int"); imageParams.append(", int");
commonBuiltins.append(prefixes[sampler.type]); commonBuiltins.append(prefixes[sampler.type]);
commonBuiltins.append("vec4 imageLoad(readonly "); commonBuiltins.append("vec4 imageLoad(readonly volatile coherent restrict ");
commonBuiltins.append(imageParams); commonBuiltins.append(imageParams);
commonBuiltins.append(");\n"); commonBuiltins.append(");\n");
commonBuiltins.append("void imageStore(writeonly "); commonBuiltins.append("void imageStore(writeonly volatile coherent restrict ");
commonBuiltins.append(imageParams); commonBuiltins.append(imageParams);
commonBuiltins.append(", "); commonBuiltins.append(", ");
commonBuiltins.append(prefixes[sampler.type]); commonBuiltins.append(prefixes[sampler.type]);
...@@ -1906,20 +1906,18 @@ void TBuiltIns::addImageFunctions(TSampler sampler, TString& typeName, int versi ...@@ -1906,20 +1906,18 @@ void TBuiltIns::addImageFunctions(TSampler sampler, TString& typeName, int versi
const int numBuiltins = 7; const int numBuiltins = 7;
static const char* atomicFunc[numBuiltins] = { static const char* atomicFunc[numBuiltins] = {
" imageAtomicAdd(", " imageAtomicAdd(volatile coherent restrict ",
" imageAtomicMin(", " imageAtomicMin(volatile coherent restrict ",
" imageAtomicMax(", " imageAtomicMax(volatile coherent restrict ",
" imageAtomicAnd(", " imageAtomicAnd(volatile coherent restrict ",
" imageAtomicOr(", " imageAtomicOr(volatile coherent restrict ",
" imageAtomicXor(", " imageAtomicXor(volatile coherent restrict ",
" imageAtomicExchange(" " imageAtomicExchange(volatile coherent restrict "
}; };
for (size_t i = 0; i < numBuiltins; ++i) { for (size_t i = 0; i < numBuiltins; ++i) {
commonBuiltins.append(dataType); commonBuiltins.append(dataType);
commonBuiltins.append(atomicFunc[i]); commonBuiltins.append(atomicFunc[i]);
if (version >= 450)
commonBuiltins.append("coherent ");
commonBuiltins.append(imageParams); commonBuiltins.append(imageParams);
commonBuiltins.append(", "); commonBuiltins.append(", ");
commonBuiltins.append(dataType); commonBuiltins.append(dataType);
...@@ -1927,7 +1925,7 @@ void TBuiltIns::addImageFunctions(TSampler sampler, TString& typeName, int versi ...@@ -1927,7 +1925,7 @@ void TBuiltIns::addImageFunctions(TSampler sampler, TString& typeName, int versi
} }
commonBuiltins.append(dataType); commonBuiltins.append(dataType);
commonBuiltins.append(" imageAtomicCompSwap("); commonBuiltins.append(" imageAtomicCompSwap(volatile coherent restrict ");
commonBuiltins.append(imageParams); commonBuiltins.append(imageParams);
commonBuiltins.append(", "); commonBuiltins.append(", ");
commonBuiltins.append(dataType); commonBuiltins.append(dataType);
...@@ -1939,7 +1937,7 @@ void TBuiltIns::addImageFunctions(TSampler sampler, TString& typeName, int versi ...@@ -1939,7 +1937,7 @@ void TBuiltIns::addImageFunctions(TSampler sampler, TString& typeName, int versi
// GL_ARB_ES3_1_compatibility // GL_ARB_ES3_1_compatibility
// TODO: spec issue: are there restrictions on the kind of layout() that can be used? what about dropping memory qualifiers? // TODO: spec issue: are there restrictions on the kind of layout() that can be used? what about dropping memory qualifiers?
if (version >= 450) { if (version >= 450) {
commonBuiltins.append("float imageAtomicExchange(coherent "); commonBuiltins.append("float imageAtomicExchange(volatile coherent restrict ");
commonBuiltins.append(imageParams); commonBuiltins.append(imageParams);
commonBuiltins.append(", float);\n"); commonBuiltins.append(", float);\n");
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment