From 548c3adecd615d85bae2e94cdc367342ae4403bf Mon Sep 17 00:00:00 2001
From: John Kessenich <cepheus@frii.com>
Date: Mon, 30 May 2016 19:38:39 -0600
Subject: [PATCH] Front-end: Complete GL_ARB_compute_shader, previous commit
 was missing new barriers.

This amends the previous commit, which ommitted barriers in version 420 for compute shader.
---
 Test/420.comp                             |  8 ++++++++
 Test/baseResults/420.comp.out             | 14 ++++++++++++++
 glslang/MachineIndependent/Initialize.cpp | 11 +++++++++--
 3 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/Test/420.comp b/Test/420.comp
index e8cee3c7d..d92e6f0d0 100755
--- a/Test/420.comp
+++ b/Test/420.comp
@@ -19,4 +19,12 @@ void main()
             gl_MaxComputeImageUniforms +
             gl_MaxComputeAtomicCounters +
             gl_MaxComputeAtomicCounterBuffers;
+
+    barrier();
+    memoryBarrier();
+    memoryBarrierAtomicCounter();
+    memoryBarrierBuffer();
+    memoryBarrierImage();
+    memoryBarrierShared();
+    groupMemoryBarrier();
 }
\ No newline at end of file
diff --git a/Test/baseResults/420.comp.out b/Test/baseResults/420.comp.out
index 719054df4..a2311d5a8 100755
--- a/Test/baseResults/420.comp.out
+++ b/Test/baseResults/420.comp.out
@@ -46,6 +46,13 @@ ERROR: node is still EOpNull!
 0:17        'sfoo' (shared 3-component vector of float)
 0:17        Constant:
 0:17          1057.000000
+0:23      Barrier (global void)
+0:24      MemoryBarrier (global void)
+0:25      MemoryBarrierAtomicCounter (global void)
+0:26      MemoryBarrierBuffer (global void)
+0:27      MemoryBarrierImage (global void)
+0:28      MemoryBarrierShared (global void)
+0:29      GroupMemoryBarrier (global void)
 0:?   Linker Objects
 0:?     'gl_WorkGroupSize' (const 3-component vector of uint WorkGroupSize)
 0:?       2 (const uint)
@@ -99,6 +106,13 @@ ERROR: node is still EOpNull!
 0:17        'sfoo' (shared 3-component vector of float)
 0:17        Constant:
 0:17          1057.000000
+0:23      Barrier (global void)
+0:24      MemoryBarrier (global void)
+0:25      MemoryBarrierAtomicCounter (global void)
+0:26      MemoryBarrierBuffer (global void)
+0:27      MemoryBarrierImage (global void)
+0:28      MemoryBarrierShared (global void)
+0:29      GroupMemoryBarrier (global void)
 0:?   Linker Objects
 0:?     'gl_WorkGroupSize' (const 3-component vector of uint WorkGroupSize)
 0:?       2 (const uint)
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index 35d7be135..6a9fb2019 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -1572,7 +1572,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan)
         stageBuiltins[EShLangTessControl].append(
             "void barrier();"
             );
-    if ((profile != EEsProfile && version >= 430) || esBarrier)
+    if ((profile != EEsProfile && version >= 420) || esBarrier)
         stageBuiltins[EShLangCompute].append(
             "void barrier();"
             );
@@ -1580,7 +1580,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan)
         commonBuiltins.append(
             "void memoryBarrier();"
             );
-    if ((profile != EEsProfile && version >= 430) || esBarrier) {
+    if ((profile != EEsProfile && version >= 420) || esBarrier) {
         commonBuiltins.append(
             "void memoryBarrierAtomicCounter();"
             "void memoryBarrierBuffer();"
@@ -3912,6 +3912,13 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, int spv, int vul
             symbolTable.setVariableExtensions("gl_MaxComputeImageUniforms",        1, &E_GL_ARB_compute_shader);
             symbolTable.setVariableExtensions("gl_MaxComputeAtomicCounters",       1, &E_GL_ARB_compute_shader);
             symbolTable.setVariableExtensions("gl_MaxComputeAtomicCounterBuffers", 1, &E_GL_ARB_compute_shader);
+
+            symbolTable.setFunctionExtensions("barrier",                    1, &E_GL_ARB_compute_shader);
+            symbolTable.setFunctionExtensions("memoryBarrierAtomicCounter", 1, &E_GL_ARB_compute_shader);
+            symbolTable.setFunctionExtensions("memoryBarrierBuffer",        1, &E_GL_ARB_compute_shader);
+            symbolTable.setFunctionExtensions("memoryBarrierImage",         1, &E_GL_ARB_compute_shader);
+            symbolTable.setFunctionExtensions("memoryBarrierShared",        1, &E_GL_ARB_compute_shader);
+            symbolTable.setFunctionExtensions("groupMemoryBarrier",         1, &E_GL_ARB_compute_shader);
         }
         break;
 
-- 
GitLab