From ec2170fdd839c4f939785cd0f10ba19d51623b58 Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Fri, 12 Oct 2018 14:58:13 -0300 Subject: [PATCH 1/8] GLES - Use TBO instead of SSBO and make shaders use it when not having gl45 --- .../src/gpu/gles/GLESBackendBuffer.cpp | 59 +++++++++++++++---- libraries/render-utils/src/Blendshape.slh | 2 +- .../render-utils/src/Highlight_aabox.slv | 2 +- .../render-utils/src/WorkloadResource.slh | 4 +- .../render/src/render/drawItemBounds.slv | 2 +- 5 files changed, 51 insertions(+), 18 deletions(-) diff --git a/libraries/gpu-gles/src/gpu/gles/GLESBackendBuffer.cpp b/libraries/gpu-gles/src/gpu/gles/GLESBackendBuffer.cpp index 5e4da4d1fe..8cadb1a43f 100644 --- a/libraries/gpu-gles/src/gpu/gles/GLESBackendBuffer.cpp +++ b/libraries/gpu-gles/src/gpu/gles/GLESBackendBuffer.cpp @@ -10,7 +10,6 @@ namespace gpu { namespace gles { - class GLESBuffer : public gpu::gl::GLBuffer { using Parent = gpu::gl::GLBuffer; static GLuint allocate() { @@ -19,11 +18,20 @@ namespace gpu { return result; } + ~GLESBuffer() { + if (_texBuffer) { + auto backend = _backend.lock(); + if (backend) { + backend->releaseTexture(_texBuffer, 0); + } + } + } + public: GLESBuffer(const std::weak_ptr& backend, const Buffer& buffer, GLESBuffer* original) : Parent(backend, buffer, allocate()) { - glBindBuffer(GL_ARRAY_BUFFER, _buffer); - glBufferData(GL_ARRAY_BUFFER, _size, nullptr, GL_DYNAMIC_DRAW); - glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindBuffer(GL_COPY_WRITE_BUFFER, _buffer); + glBufferData(GL_COPY_WRITE_BUFFER, _size, nullptr, GL_DYNAMIC_DRAW); + glBindBuffer(GL_COPY_WRITE_BUFFER, 0); if (original && original->_size) { glBindBuffer(GL_COPY_WRITE_BUFFER, _buffer); @@ -37,20 +45,34 @@ namespace gpu { } void transfer() override { - glBindBuffer(GL_ARRAY_BUFFER, _buffer); + glBindBuffer(GL_COPY_WRITE_BUFFER, _buffer); (void)CHECK_GL_ERROR(); Size offset; Size size; Size currentPage { 0 }; auto data = _gpuObject._renderSysmem.readData(); while (_gpuObject._renderPages.getNextTransferBlock(offset, size, currentPage)) { - glBufferSubData(GL_ARRAY_BUFFER, offset, size, data + offset); + glBufferSubData(GL_COPY_WRITE_BUFFER, offset, size, data + offset); (void)CHECK_GL_ERROR(); } - glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindBuffer(GL_COPY_WRITE_BUFFER, 0); (void)CHECK_GL_ERROR(); _gpuObject._renderPages._flags &= ~PageManager::DIRTY; } + + // REsource BUffer are implemented with TextureBuffer + GLuint _texBuffer { 0 }; + GLuint getTexBufferId() { + if (!_texBuffer) { + glGenTextures(1, &_texBuffer); + glActiveTexture(GL_TEXTURE0 + GLESBackend::RESOURCE_BUFFER_TEXBUF_TEX_UNIT); + glBindTexture(GL_TEXTURE_BUFFER, _texBuffer); + glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, _buffer); + glBindTexture(GL_TEXTURE_BUFFER, 0); + (void)CHECK_GL_ERROR(); + } + return _texBuffer; + } }; } } @@ -68,14 +90,24 @@ GLuint GLESBackend::getBufferIDUnsynced(const Buffer& buffer) { return GLESBuffer::getIdUnsynced(*this, buffer); } +GLuint GLESBackend::getResourceBufferID(const Buffer& buffer) { + auto* object = GLESBuffer::sync(*this, buffer); + if (object) { + return object->getTexBufferId(); + } else { + return 0; + } +} + GLBuffer* GLESBackend::syncGPUObject(const Buffer& buffer) { return GLESBuffer::sync(*this, buffer); } bool GLESBackend::bindResourceBuffer(uint32_t slot, const BufferPointer& buffer) { - GLBuffer* object = syncGPUObject((*buffer)); - if (object) { - glBindBufferBase(GL_SHADER_STORAGE_BUFFER, slot, object->_id); + GLuint texBuffer = GLESBackend::getResourceBufferID((*buffer)); + if (texBuffer) { + glActiveTexture(GL_TEXTURE0 + GLESBackend::RESOURCE_BUFFER_SLOT0_TEX_UNIT + slot); + glBindTexture(GL_TEXTURE_BUFFER, texBuffer); (void)CHECK_GL_ERROR(); @@ -89,9 +121,10 @@ bool GLESBackend::bindResourceBuffer(uint32_t slot, const BufferPointer& buffer) void GLESBackend::releaseResourceBuffer(uint32_t slot) { auto& bufferReference = _resource._buffers[slot]; - if (valid(bufferReference)) { - glBindBufferBase(GL_SHADER_STORAGE_BUFFER, slot, 0); + auto buffer = acquire(bufferReference); + if (buffer) { + glActiveTexture(GL_TEXTURE0 + GLESBackend::RESOURCE_BUFFER_SLOT0_TEX_UNIT + slot); + glBindTexture(GL_TEXTURE_BUFFER, 0); reset(bufferReference); } } - diff --git a/libraries/render-utils/src/Blendshape.slh b/libraries/render-utils/src/Blendshape.slh index df62af5a77..dabc34e7dd 100644 --- a/libraries/render-utils/src/Blendshape.slh +++ b/libraries/render-utils/src/Blendshape.slh @@ -10,7 +10,7 @@ <@func declareBlendshape(USE_NORMAL, USE_TANGENT)@> -#if defined(GPU_GL410) +#if !defined(GPU_GL450) layout(binding=0) uniform samplerBuffer blendshapeOffsetsBuffer; uvec4 getPackedBlendshapeOffset(int i) { return floatBitsToUint(texelFetch(blendshapeOffsetsBuffer, i)); diff --git a/libraries/render-utils/src/Highlight_aabox.slv b/libraries/render-utils/src/Highlight_aabox.slv index 2ecebdea51..365813ff42 100644 --- a/libraries/render-utils/src/Highlight_aabox.slv +++ b/libraries/render-utils/src/Highlight_aabox.slv @@ -22,7 +22,7 @@ struct ItemBound { vec4 boundDim_s; }; -#if defined(GPU_GL410) +#if !defined(GPU_GL450) layout(binding=0) uniform samplerBuffer ssbo0Buffer; ItemBound getItemBound(int i) { int offset = 2 * i; diff --git a/libraries/render-utils/src/WorkloadResource.slh b/libraries/render-utils/src/WorkloadResource.slh index 81b6ed78ce..be78b432bf 100644 --- a/libraries/render-utils/src/WorkloadResource.slh +++ b/libraries/render-utils/src/WorkloadResource.slh @@ -25,7 +25,7 @@ struct WorkloadProxy { vec4 region; }; -#if defined(GPU_GL410) +#if !defined(GPU_GL450) layout(binding=0) uniform samplerBuffer workloadProxiesBuffer; WorkloadProxy getWorkloadProxy(int i) { int offset = 2 * i; @@ -57,7 +57,7 @@ struct WorkloadView { vec4 regions[3]; }; -#if defined(GPU_GL410) +#if !defined(GPU_GL450) layout(binding=1) uniform samplerBuffer workloadViewsBuffer; WorkloadView getWorkloadView(int i) { int offset = 2 * i; diff --git a/libraries/render/src/render/drawItemBounds.slv b/libraries/render/src/render/drawItemBounds.slv index ea4d0f24e6..8c3540ad40 100644 --- a/libraries/render/src/render/drawItemBounds.slv +++ b/libraries/render/src/render/drawItemBounds.slv @@ -34,7 +34,7 @@ struct ItemBound { vec4 boundDim_s; }; -#if defined(GPU_GL410) +#if !defined(GPU_GL450) layout(binding=0) uniform samplerBuffer ssbo0Buffer; ItemBound getItemBound(int i) { int offset = 2 * i; From 837dabd30c28ab246702ae22111466639998d344 Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Fri, 12 Oct 2018 16:55:46 -0300 Subject: [PATCH 2/8] GLES - use GPU_SSBO_TRANSFORM_OBJECT to test whether they should use SSBOs, not a specific GL version --- libraries/render-utils/src/Blendshape.slh | 2 +- libraries/render-utils/src/Highlight_aabox.slv | 2 +- libraries/render-utils/src/WorkloadResource.slh | 4 ++-- libraries/render/src/render/drawItemBounds.slv | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libraries/render-utils/src/Blendshape.slh b/libraries/render-utils/src/Blendshape.slh index dabc34e7dd..7d1ab2d31e 100644 --- a/libraries/render-utils/src/Blendshape.slh +++ b/libraries/render-utils/src/Blendshape.slh @@ -10,7 +10,7 @@ <@func declareBlendshape(USE_NORMAL, USE_TANGENT)@> -#if !defined(GPU_GL450) +#if !defined(GPU_SSBO_TRANSFORM_OBJECT) layout(binding=0) uniform samplerBuffer blendshapeOffsetsBuffer; uvec4 getPackedBlendshapeOffset(int i) { return floatBitsToUint(texelFetch(blendshapeOffsetsBuffer, i)); diff --git a/libraries/render-utils/src/Highlight_aabox.slv b/libraries/render-utils/src/Highlight_aabox.slv index 365813ff42..e358afb003 100644 --- a/libraries/render-utils/src/Highlight_aabox.slv +++ b/libraries/render-utils/src/Highlight_aabox.slv @@ -22,7 +22,7 @@ struct ItemBound { vec4 boundDim_s; }; -#if !defined(GPU_GL450) +#if !defined(GPU_SSBO_TRANSFORM_OBJECT) layout(binding=0) uniform samplerBuffer ssbo0Buffer; ItemBound getItemBound(int i) { int offset = 2 * i; diff --git a/libraries/render-utils/src/WorkloadResource.slh b/libraries/render-utils/src/WorkloadResource.slh index be78b432bf..42eec8de49 100644 --- a/libraries/render-utils/src/WorkloadResource.slh +++ b/libraries/render-utils/src/WorkloadResource.slh @@ -25,7 +25,7 @@ struct WorkloadProxy { vec4 region; }; -#if !defined(GPU_GL450) +#if !defined(GPU_SSBO_TRANSFORM_OBJECT) layout(binding=0) uniform samplerBuffer workloadProxiesBuffer; WorkloadProxy getWorkloadProxy(int i) { int offset = 2 * i; @@ -57,7 +57,7 @@ struct WorkloadView { vec4 regions[3]; }; -#if !defined(GPU_GL450) +#if !defined(GPU_SSBO_TRANSFORM_OBJECT) layout(binding=1) uniform samplerBuffer workloadViewsBuffer; WorkloadView getWorkloadView(int i) { int offset = 2 * i; diff --git a/libraries/render/src/render/drawItemBounds.slv b/libraries/render/src/render/drawItemBounds.slv index 8c3540ad40..34a926f684 100644 --- a/libraries/render/src/render/drawItemBounds.slv +++ b/libraries/render/src/render/drawItemBounds.slv @@ -34,7 +34,7 @@ struct ItemBound { vec4 boundDim_s; }; -#if !defined(GPU_GL450) +#if !defined(GPU_SSBO_TRANSFORM_OBJECT) layout(binding=0) uniform samplerBuffer ssbo0Buffer; ItemBound getItemBound(int i) { int offset = 2 * i; From a09b1adb6c8d39337dc911deac02d642cf29e08e Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Tue, 30 Oct 2018 16:45:25 -0300 Subject: [PATCH 3/8] Android temporal change - Bring back GLESBackend TEX_UNIT constants --- libraries/gpu-gles/src/gpu/gles/GLESBackend.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libraries/gpu-gles/src/gpu/gles/GLESBackend.h b/libraries/gpu-gles/src/gpu/gles/GLESBackend.h index 8ecdb2494b..aaa1be5892 100644 --- a/libraries/gpu-gles/src/gpu/gles/GLESBackend.h +++ b/libraries/gpu-gles/src/gpu/gles/GLESBackend.h @@ -28,6 +28,10 @@ class GLESBackend : public GLBackend { public: static const GLint RESOURCE_TRANSFER_TEX_UNIT { 32 }; + static const GLint RESOURCE_TRANSFER_EXTRA_TEX_UNIT { 33 }; + static const GLint RESOURCE_BUFFER_TEXBUF_TEX_UNIT { 34 }; + static const GLint RESOURCE_BUFFER_SLOT0_TEX_UNIT { 35 }; + explicit GLESBackend(bool syncCache) : Parent(syncCache) {} GLESBackend() : Parent() {} virtual ~GLESBackend() { From bc7e49482ad122453ba03fd978a3d87ce8f7793c Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Tue, 30 Oct 2018 19:44:39 -0300 Subject: [PATCH 4/8] Add Android for the condition of _meshBlendshapeBuffer usage --- libraries/render-utils/src/MeshPartPayload.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/render-utils/src/MeshPartPayload.cpp b/libraries/render-utils/src/MeshPartPayload.cpp index 4ebd92bb05..60b6b8aae7 100644 --- a/libraries/render-utils/src/MeshPartPayload.cpp +++ b/libraries/render-utils/src/MeshPartPayload.cpp @@ -239,7 +239,7 @@ ModelMeshPartPayload::ModelMeshPartPayload(ModelPointer model, int meshIndex, in initCache(model); -#ifdef Q_OS_MAC +#if defined(Q_OS_MAC) || defined(Q_OS_ANDROID) // On mac AMD, we specifically need to have a _meshBlendshapeBuffer bound when using a deformed mesh pipeline // it cannot be null otherwise we crash in the drawcall using a deformed pipeline with a skinned only (not blendshaped) mesh if (_isBlendShaped) { From fa0c58fa0e78f44dc9fd12f5766102ae4f94b431 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Fri, 2 Nov 2018 00:08:47 -0700 Subject: [PATCH 5/8] 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]) From bcda6a70050e97875d5e925f888dc87ca2f5cada Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Fri, 2 Nov 2018 14:03:39 -0300 Subject: [PATCH 6/8] Revert headerFlag change to -h --- tools/shadergen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/shadergen.py b/tools/shadergen.py index 8936b987c5..7450aebcb3 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]) From c310d41af7320cf74d5c5aae7a39f1d616f1045d Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Fri, 2 Nov 2018 14:59:30 -0300 Subject: [PATCH 7/8] Change GPU_RESOURCE_BUFFER_SLOT1_TEXTURE to 36 --- libraries/gpu/src/gpu/ShaderConstants.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/gpu/src/gpu/ShaderConstants.h b/libraries/gpu/src/gpu/ShaderConstants.h index ef8e26519c..1a37c69784 100644 --- a/libraries/gpu/src/gpu/ShaderConstants.h +++ b/libraries/gpu/src/gpu/ShaderConstants.h @@ -23,7 +23,7 @@ #define GPU_RESOURCE_BUFFER_SLOT0_TEXTURE 35 -#define GPU_RESOURCE_BUFFER_SLOT1_TEXTURE 35 +#define GPU_RESOURCE_BUFFER_SLOT1_TEXTURE 36 #define GPU_RESOURCE_BUFFER_SLOT0_STORAGE 0 #define GPU_RESOURCE_BUFFER_SLOT1_STORAGE 1 From e263776b1928b2f4cdf05949348b21f460a971c9 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Wed, 7 Nov 2018 17:33:56 -0800 Subject: [PATCH 8/8] Address the mac bug with ResourceBUffer implemented with TBO --- libraries/gpu-gl/src/gpu/gl41/GL41BackendShader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/gpu-gl/src/gpu/gl41/GL41BackendShader.cpp b/libraries/gpu-gl/src/gpu/gl41/GL41BackendShader.cpp index f162afc497..f33dd91d03 100644 --- a/libraries/gpu-gl/src/gpu/gl41/GL41BackendShader.cpp +++ b/libraries/gpu-gl/src/gpu/gl41/GL41BackendShader.cpp @@ -49,7 +49,7 @@ void GL41Backend::postLinkProgram(ShaderObject& programObject, const Shader& pro const auto resourceBufferUniforms = ::gl::Uniform::loadByName(glprogram, names); for (const auto& resourceBuffer : resourceBufferUniforms) { const auto& targetBinding = expectedResourceBuffers.at(resourceBuffer.name); - glProgramUniform1i(glprogram, resourceBuffer.binding, targetBinding + GL41Backend::RESOURCE_BUFFER_SLOT0_TEX_UNIT); + glProgramUniform1i(glprogram, resourceBuffer.binding, targetBinding); } }