From 7440bed0b8d2232d72ed1ec02e3f42fe87b3b463 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Wed, 28 Jun 2017 18:08:20 -0700 Subject: [PATCH] GL: Fixed compute texture sampler. --- src/renderer_gl.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 2b19bc242..7b148e363 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -5861,6 +5861,26 @@ namespace bgfx { namespace gl code = temp; } + else if (GL_COMPUTE_SHADER == m_type) + { + int32_t codeLen = (int32_t)bx::strLen(code); + int32_t tempLen = codeLen + (4<<10); + char* temp = (char*)alloca(tempLen); + bx::StaticMemoryBlockWriter writer(temp, tempLen); + + writeString(&writer, "#version 430\n"); + writeString(&writer, "#define texture2DLod textureLod\n"); + writeString(&writer, "#define texture3DLod textureLod\n"); + writeString(&writer, "#define textureCubeLod textureLod\n"); + writeString(&writer, "#define texture2DGrad textureGrad\n"); + writeString(&writer, "#define texture3DGrad textureGrad\n"); + writeString(&writer, "#define textureCubeGrad textureGrad\n"); + + bx::write(&writer, code+bx::strLen("#version 430"), codeLen); + bx::write(&writer, '\0'); + + code = temp; + } GL_CHECK(glShaderSource(m_id, 1, (const GLchar**)&code, NULL) ); GL_CHECK(glCompileShader(m_id) ); @@ -6586,14 +6606,20 @@ namespace bgfx { namespace gl { switch (bind.m_type) { - case Binding::Image: case Binding::Texture: + { + TextureGL& texture = m_textures[bind.m_idx]; + texture.commit(ii, bind.m_un.m_draw.m_textureFlags, _render->m_colorPalette); + } + break; + + case Binding::Image: { const TextureGL& texture = m_textures[bind.m_idx]; GL_CHECK(glBindImageTexture(ii , texture.m_id , bind.m_un.m_compute.m_mip - , texture.isCubeMap()?GL_TRUE:GL_FALSE + , texture.isCubeMap() ? GL_TRUE : GL_FALSE , 0 , s_access[bind.m_un.m_compute.m_access] , s_imageFormat[bind.m_un.m_compute.m_format])