[Mesa-dev] [PATCH 4/4] i965/es3.1: Implement glMemoryBarrierByRegion
Marta Lofstedt
marta.lofstedt at linux.intel.com
Fri Jul 31 05:15:53 PDT 2015
From: Marta Lofstedt <marta.lofstedt at intel.com>
Signed-off-by: Marta Lofstedt <marta.lofstedt at 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
More information about the mesa-dev
mailing list