From: Marta Lofstedt <marta.lofst...@intel.com> Signed-off-by: Marta Lofstedt <marta.lofst...@intel.com> --- src/mesa/drivers/dri/i965/brw_program.c | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+)
diff --git a/src/mesa/drivers/dri/i965/brw_program.c b/src/mesa/drivers/dri/i965/brw_program.c index 85e271d..332d84e 100644 --- a/src/mesa/drivers/dri/i965/brw_program.c +++ b/src/mesa/drivers/dri/i965/brw_program.c @@ -226,6 +226,39 @@ brw_memory_barrier(struct gl_context *ctx, GLbitfield barriers) brw_emit_pipe_control_flush(brw, bits); } +static void +brw_memory_barrier_by_region(struct gl_context *ctx, GLbitfield barriers) +{ + 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; + /* + * According to OpenGL ES 3.1 spec. April 29, 2015, 7.11.2: + * "When barriers are ALL_BARRIERS_BIT, shader memory access + * will be synchronized realtive to all theese barrier bits, + * but not to other barrier bits specific to MemoryBarrier." + * I.e if bariiers is the special value GL_ALL_BARRIER_BITS, + * then all barriers allowed by glMemoryBarrierByRegion + * should be activated. + */ + if (barriers == GL_ALL_BARRIER_BITS) + return brw_memory_barrier(ctx, all_allowed_bits); + + /* + * If barriers contain a value that is not allowed + * for glMemoryBarrierByRegion an GL_INVALID_VALUE + * should be generated. + */ + if ((all_allowed_bits | barriers) ^ all_allowed_bits) + _mesa_error(ctx, GL_INVALID_VALUE, + "glMemoryBarrierByRegion(unsupported barrier bit"); + + return brw_memory_barrier(ctx, barriers); +} + void brw_add_texrect_params(struct gl_program *prog) { @@ -285,6 +318,7 @@ void brwInitFragProgFuncs( struct dd_function_table *functions ) functions->LinkShader = brw_link_shader; functions->MemoryBarrier = brw_memory_barrier; + functions->MemoryBarrierByRegion = brw_memory_barrier_by_region; } struct shader_times { -- 1.9.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev