From: Francisco Jerez Date: Wed, 6 Jul 2016 06:18:18 +0000 (-0700) Subject: mesa: Move shader memory barrier functions into barrier.c. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6a976bbf84c9c8790fa61bbeb5eb24a2e646c76c;p=mesa.git mesa: Move shader memory barrier functions into barrier.c. Reviewed-by: Kenneth Graunke --- diff --git a/src/mesa/main/barrier.c b/src/mesa/main/barrier.c index beb48fb77b5..7ae8fc6b0aa 100644 --- a/src/mesa/main/barrier.c +++ b/src/mesa/main/barrier.c @@ -57,3 +57,54 @@ _mesa_TextureBarrierNV(void) ctx->Driver.TextureBarrier(ctx); } + +void GLAPIENTRY +_mesa_MemoryBarrier(GLbitfield barriers) +{ + GET_CURRENT_CONTEXT(ctx); + + if (ctx->Driver.MemoryBarrier) + ctx->Driver.MemoryBarrier(ctx, barriers); +} + +void GLAPIENTRY +_mesa_MemoryBarrierByRegion(GLbitfield barriers) +{ + GET_CURRENT_CONTEXT(ctx); + + GLbitfield all_allowed_bits = GL_ATOMIC_COUNTER_BARRIER_BIT | + GL_FRAMEBUFFER_BARRIER_BIT | + GL_SHADER_IMAGE_ACCESS_BARRIER_BIT | + GL_SHADER_STORAGE_BARRIER_BIT | + GL_TEXTURE_FETCH_BARRIER_BIT | + GL_UNIFORM_BARRIER_BIT; + + if (ctx->Driver.MemoryBarrier) { + /* From section 7.11.2 of the OpenGL ES 3.1 specification: + * + * "When barriers is ALL_BARRIER_BITS, shader memory accesses will be + * synchronized relative to all these barrier bits, but not to other + * barrier bits specific to MemoryBarrier." + * + * That is, if barriers is the special value GL_ALL_BARRIER_BITS, then all + * barriers allowed by glMemoryBarrierByRegion should be activated." + */ + if (barriers == GL_ALL_BARRIER_BITS) { + ctx->Driver.MemoryBarrier(ctx, all_allowed_bits); + return; + } + + /* From section 7.11.2 of the OpenGL ES 3.1 specification: + * + * "An INVALID_VALUE error is generated if barriers is not the special + * value ALL_BARRIER_BITS, and has any bits set other than those + * described above." + */ + if ((barriers & ~all_allowed_bits) != 0) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glMemoryBarrierByRegion(unsupported barrier bit"); + } + + ctx->Driver.MemoryBarrier(ctx, barriers); + } +} diff --git a/src/mesa/main/barrier.h b/src/mesa/main/barrier.h index 0652d14f3f0..8eee583c7ff 100644 --- a/src/mesa/main/barrier.h +++ b/src/mesa/main/barrier.h @@ -41,4 +41,10 @@ _mesa_init_barrier_functions(struct dd_function_table *driver); extern void GLAPIENTRY _mesa_TextureBarrierNV(void); +void GLAPIENTRY +_mesa_MemoryBarrier(GLbitfield barriers); + +void GLAPIENTRY +_mesa_MemoryBarrierByRegion(GLbitfield barriers); + #endif /* BARRIER_H */ diff --git a/src/mesa/main/shaderimage.c b/src/mesa/main/shaderimage.c index 90643c4ed6d..db36e3bb101 100644 --- a/src/mesa/main/shaderimage.c +++ b/src/mesa/main/shaderimage.c @@ -753,54 +753,3 @@ _mesa_BindImageTextures(GLuint first, GLsizei count, const GLuint *textures) _mesa_end_texture_lookups(ctx); } - -void GLAPIENTRY -_mesa_MemoryBarrier(GLbitfield barriers) -{ - GET_CURRENT_CONTEXT(ctx); - - if (ctx->Driver.MemoryBarrier) - ctx->Driver.MemoryBarrier(ctx, barriers); -} - -void GLAPIENTRY -_mesa_MemoryBarrierByRegion(GLbitfield barriers) -{ - GET_CURRENT_CONTEXT(ctx); - - GLbitfield all_allowed_bits = GL_ATOMIC_COUNTER_BARRIER_BIT | - GL_FRAMEBUFFER_BARRIER_BIT | - GL_SHADER_IMAGE_ACCESS_BARRIER_BIT | - GL_SHADER_STORAGE_BARRIER_BIT | - GL_TEXTURE_FETCH_BARRIER_BIT | - GL_UNIFORM_BARRIER_BIT; - - if (ctx->Driver.MemoryBarrier) { - /* From section 7.11.2 of the OpenGL ES 3.1 specification: - * - * "When barriers is ALL_BARRIER_BITS, shader memory accesses will be - * synchronized relative to all these barrier bits, but not to other - * barrier bits specific to MemoryBarrier." - * - * That is, if barriers is the special value GL_ALL_BARRIER_BITS, then all - * barriers allowed by glMemoryBarrierByRegion should be activated." - */ - if (barriers == GL_ALL_BARRIER_BITS) { - ctx->Driver.MemoryBarrier(ctx, all_allowed_bits); - return; - } - - /* From section 7.11.2 of the OpenGL ES 3.1 specification: - * - * "An INVALID_VALUE error is generated if barriers is not the special - * value ALL_BARRIER_BITS, and has any bits set other than those - * described above." - */ - if ((barriers & ~all_allowed_bits) != 0) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glMemoryBarrierByRegion(unsupported barrier bit"); - } - - ctx->Driver.MemoryBarrier(ctx, barriers); - } -} diff --git a/src/mesa/main/shaderimage.h b/src/mesa/main/shaderimage.h index 85193e104f6..2cf0b0abc72 100644 --- a/src/mesa/main/shaderimage.h +++ b/src/mesa/main/shaderimage.h @@ -87,12 +87,6 @@ _mesa_BindImageTexture(GLuint unit, GLuint texture, GLint level, void GLAPIENTRY _mesa_BindImageTextures(GLuint first, GLsizei count, const GLuint *textures); -void GLAPIENTRY -_mesa_MemoryBarrier(GLbitfield barriers); - -void GLAPIENTRY -_mesa_MemoryBarrierByRegion(GLbitfield barriers); - #ifdef __cplusplus } #endif