From fa0c58fa0e78f44dc9fd12f5766102ae4f94b431 Mon Sep 17 00:00:00 2001
From: Sam Gateau <samuel.gateau@gmail.com>
Date: Fri, 2 Nov 2018 00:08:47 -0700
Subject: [PATCH] Assign the correct binding slots for the Resource Buffers to
 fix the deformed mesh rendering of the Avatar in gles backend

---
 interface/src/Application.cpp                   | 3 +++
 libraries/gpu/src/gpu/ShaderConstants.h         | 6 ++++++
 libraries/render-utils/src/Blendshape.slh       | 4 ++--
 libraries/render-utils/src/Highlight_aabox.slv  | 4 ++--
 libraries/render-utils/src/WorkloadResource.slh | 8 ++++----
 libraries/render/src/render/drawItemBounds.slv  | 4 ++--
 tools/shadergen.py                              | 2 +-
 7 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp
index 7cd91d76a0..d50c5d24fb 100644
--- a/interface/src/Application.cpp
+++ b/interface/src/Application.cpp
@@ -2786,6 +2786,7 @@ void Application::initializeGL() {
     }
 
     // Build a shared canvas / context for the QML rendering
+#if !defined(DISABLE_QML)
     {
         _qmlShareContext = new OffscreenGLCanvas();
         _qmlShareContext->setObjectName("QmlShareContext");
@@ -2799,6 +2800,8 @@ void Application::initializeGL() {
             qCWarning(interfaceapp, "Unable to make window context current");
         }
     }
+#endif
+
 
     _renderEventHandler = new RenderEventHandler();
 
diff --git a/libraries/gpu/src/gpu/ShaderConstants.h b/libraries/gpu/src/gpu/ShaderConstants.h
index e9a1821ef4..ef8e26519c 100644
--- a/libraries/gpu/src/gpu/ShaderConstants.h
+++ b/libraries/gpu/src/gpu/ShaderConstants.h
@@ -21,6 +21,12 @@
 
 #define GPU_TEXTURE_TRANSFORM_OBJECT 31
 
+
+#define GPU_RESOURCE_BUFFER_SLOT0_TEXTURE 35
+#define GPU_RESOURCE_BUFFER_SLOT1_TEXTURE 35
+#define GPU_RESOURCE_BUFFER_SLOT0_STORAGE 0
+#define GPU_RESOURCE_BUFFER_SLOT1_STORAGE 1
+
 // Mip creation
 #define GPU_TEXTURE_MIP_CREATION_INPUT 30
 
diff --git a/libraries/render-utils/src/Blendshape.slh b/libraries/render-utils/src/Blendshape.slh
index 73a561c73f..f2c6bfe794 100644
--- a/libraries/render-utils/src/Blendshape.slh
+++ b/libraries/render-utils/src/Blendshape.slh
@@ -11,12 +11,12 @@
 <@func declareBlendshape(USE_NORMAL, USE_TANGENT)@>
 
 #if !defined(GPU_SSBO_TRANSFORM_OBJECT)
-LAYOUT(binding=0) uniform samplerBuffer blendshapeOffsetsBuffer;
+LAYOUT(binding=GPU_RESOURCE_BUFFER_SLOT0_TEXTURE) uniform samplerBuffer blendshapeOffsetsBuffer;
 uvec4 getPackedBlendshapeOffset(int i) {
     return floatBitsToUint(texelFetch(blendshapeOffsetsBuffer, i));
 }
 #else
-LAYOUT_STD140(binding=0) buffer blendshapeOffsetsBuffer {
+LAYOUT_STD140(binding=GPU_RESOURCE_BUFFER_SLOT0_STORAGE) buffer blendshapeOffsetsBuffer {
     uvec4 _packedBlendshapeOffsets[];
 };
 uvec4 getPackedBlendshapeOffset(int i) {
diff --git a/libraries/render-utils/src/Highlight_aabox.slv b/libraries/render-utils/src/Highlight_aabox.slv
index 17ef7b6e07..65b98355ae 100644
--- a/libraries/render-utils/src/Highlight_aabox.slv
+++ b/libraries/render-utils/src/Highlight_aabox.slv
@@ -23,7 +23,7 @@ struct ItemBound {
 };
 
 #if !defined(GPU_SSBO_TRANSFORM_OBJECT)
-LAYOUT(binding=0) uniform samplerBuffer ssbo0Buffer;
+LAYOUT(binding=GPU_RESOURCE_BUFFER_SLOT0_TEXTURE) uniform samplerBuffer ssbo0Buffer;
 ItemBound getItemBound(int i) {
     int offset = 2 * i;
     ItemBound bound;
@@ -32,7 +32,7 @@ ItemBound getItemBound(int i) {
     return bound;
 }
 #else
-LAYOUT_STD140(binding=0) buffer ssbo0Buffer {
+LAYOUT_STD140(binding=GPU_RESOURCE_BUFFER_SLOT0_STORAGE) buffer ssbo0Buffer {
     ItemBound bounds[];
 };
 ItemBound getItemBound(int i) {
diff --git a/libraries/render-utils/src/WorkloadResource.slh b/libraries/render-utils/src/WorkloadResource.slh
index ed23abd5ae..14fa33a12e 100644
--- a/libraries/render-utils/src/WorkloadResource.slh
+++ b/libraries/render-utils/src/WorkloadResource.slh
@@ -26,7 +26,7 @@ struct WorkloadProxy {
 };
 
 #if !defined(GPU_SSBO_TRANSFORM_OBJECT)
-LAYOUT(binding=0) uniform samplerBuffer workloadProxiesBuffer;
+LAYOUT(binding=GPU_RESOURCE_BUFFER_SLOT0_TEXTURE) uniform samplerBuffer workloadProxiesBuffer;
 WorkloadProxy getWorkloadProxy(int i) {
     int offset = 2 * i;
     WorkloadProxy proxy;
@@ -35,7 +35,7 @@ WorkloadProxy getWorkloadProxy(int i) {
     return proxy;
 }
 #else
-LAYOUT_STD140(binding=0) buffer workloadProxiesBuffer {
+LAYOUT_STD140(binding=GPU_RESOURCE_BUFFER_SLOT0_STORAGE) buffer workloadProxiesBuffer {
     WorkloadProxy _proxies[];
 };
 WorkloadProxy getWorkloadProxy(int i) {
@@ -58,7 +58,7 @@ struct WorkloadView {
 };
 
 #if !defined(GPU_SSBO_TRANSFORM_OBJECT)
-LAYOUT(binding=1) uniform samplerBuffer workloadViewsBuffer;
+LAYOUT(binding=GPU_RESOURCE_BUFFER_SLOT1_TEXTURE) uniform samplerBuffer workloadViewsBuffer;
 WorkloadView getWorkloadView(int i) {
     int offset = 8 * i;
     WorkloadView view;
@@ -73,7 +73,7 @@ WorkloadView getWorkloadView(int i) {
     return view;
 }
 #else
-LAYOUT_STD140(binding=1) buffer workloadViewsBuffer {
+LAYOUT_STD140(binding=GPU_RESOURCE_BUFFER_SLOT1_STORAGE) buffer workloadViewsBuffer {
     WorkloadView _views[];
 };
 WorkloadView getWorkloadView(int i) {
diff --git a/libraries/render/src/render/drawItemBounds.slv b/libraries/render/src/render/drawItemBounds.slv
index 0a9615c9c2..bb8e6a2886 100644
--- a/libraries/render/src/render/drawItemBounds.slv
+++ b/libraries/render/src/render/drawItemBounds.slv
@@ -35,7 +35,7 @@ struct ItemBound {
 };
 
 #if !defined(GPU_SSBO_TRANSFORM_OBJECT)
-LAYOUT(binding=0) uniform samplerBuffer ssbo0Buffer;
+LAYOUT(binding=GPU_RESOURCE_BUFFER_SLOT0_TEXTURE) uniform samplerBuffer ssbo0Buffer;
 ItemBound getItemBound(int i) {
     int offset = 2 * i;
     ItemBound bound;
@@ -44,7 +44,7 @@ ItemBound getItemBound(int i) {
     return bound;
 }
 #else
-LAYOUT_STD140(binding=0) buffer ssbo0Buffer {
+LAYOUT_STD140(binding=GPU_RESOURCE_BUFFER_SLOT0_STORAGE) buffer ssbo0Buffer {
     ItemBound bounds[];
 };
 ItemBound getItemBound(int i) {
diff --git a/tools/shadergen.py b/tools/shadergen.py
index 7450aebcb3..8936b987c5 100644
--- a/tools/shadergen.py
+++ b/tools/shadergen.py
@@ -172,7 +172,7 @@ def processCommand(line):
         scribeArgs = getCommonScribeArgs(scribeFile, libs)
         headerFlag = '-H'
         # using the old flag on Android builds for now
-        if (dialect == '310es'): headerFlag = '-h'
+        if (dialect == '310es'): headerFlag = '-H'
         for header in getDialectAndVariantHeaders(dialect, variant):
             scribeArgs.extend([headerFlag, header])
         scribeArgs.extend(['-o', unoptGlslFile])