Module: Mesa Branch: main Commit: 8956b7f38f889249911703a907db42a97131d76c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8956b7f38f889249911703a907db42a97131d76c
Author: Dave Airlie <[email protected]> Date: Fri Dec 10 05:03:04 2021 +1000 mesa/st: migrate barrier code into mesa Reviewed-by: Emma Anholt <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14257> --- src/mesa/main/barrier.c | 77 +++++++++++++-- src/mesa/meson.build | 2 - src/mesa/state_tracker/st_cb_texturebarrier.c | 132 -------------------------- src/mesa/state_tracker/st_cb_texturebarrier.h | 35 ------- 4 files changed, 70 insertions(+), 176 deletions(-) diff --git a/src/mesa/main/barrier.c b/src/mesa/main/barrier.c index 5b49b0338f3..4647e28e033 100644 --- a/src/mesa/main/barrier.c +++ b/src/mesa/main/barrier.c @@ -31,7 +31,70 @@ #include "context.h" #include "api_exec_decl.h" -#include "state_tracker/st_cb_texturebarrier.h" +#include "pipe/p_context.h" + + +static void +memory_barrier(struct gl_context *ctx, GLbitfield barriers) +{ + struct pipe_context *pipe = ctx->pipe; + unsigned flags = 0; + + if (barriers & GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT) + flags |= PIPE_BARRIER_VERTEX_BUFFER; + if (barriers & GL_ELEMENT_ARRAY_BARRIER_BIT) + flags |= PIPE_BARRIER_INDEX_BUFFER; + if (barriers & GL_UNIFORM_BARRIER_BIT) + flags |= PIPE_BARRIER_CONSTANT_BUFFER; + if (barriers & GL_TEXTURE_FETCH_BARRIER_BIT) + flags |= PIPE_BARRIER_TEXTURE; + if (barriers & GL_SHADER_IMAGE_ACCESS_BARRIER_BIT) + flags |= PIPE_BARRIER_IMAGE; + if (barriers & GL_COMMAND_BARRIER_BIT) + flags |= PIPE_BARRIER_INDIRECT_BUFFER; + if (barriers & GL_PIXEL_BUFFER_BARRIER_BIT) { + /* The PBO may be + * (1) bound as a texture for PBO uploads, or + * (2) accessed by the CPU via transfer ops. + * For case (2), we assume automatic flushing by the driver. + */ + flags |= PIPE_BARRIER_TEXTURE; + } + if (barriers & GL_TEXTURE_UPDATE_BARRIER_BIT) { + /* GL_TEXTURE_UPDATE_BARRIER_BIT: + * Texture updates translate to: + * (1) texture transfers to/from the CPU, + * (2) texture as blit destination, or + * (3) texture as framebuffer. + * Some drivers may handle these automatically, and can ignore the bit. + */ + flags |= PIPE_BARRIER_UPDATE_TEXTURE; + } + if (barriers & GL_BUFFER_UPDATE_BARRIER_BIT) { + /* GL_BUFFER_UPDATE_BARRIER_BIT: + * Buffer updates translate to + * (1) buffer transfers to/from the CPU, + * (2) resource copies and clears. + * Some drivers may handle these automatically, and can ignore the bit. + */ + flags |= PIPE_BARRIER_UPDATE_BUFFER; + } + if (barriers & GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT) + flags |= PIPE_BARRIER_MAPPED_BUFFER; + if (barriers & GL_QUERY_BUFFER_BARRIER_BIT) + flags |= PIPE_BARRIER_QUERY_BUFFER; + if (barriers & GL_FRAMEBUFFER_BARRIER_BIT) + flags |= PIPE_BARRIER_FRAMEBUFFER; + if (barriers & GL_TRANSFORM_FEEDBACK_BARRIER_BIT) + flags |= PIPE_BARRIER_STREAMOUT_BUFFER; + if (barriers & GL_ATOMIC_COUNTER_BARRIER_BIT) + flags |= PIPE_BARRIER_SHADER_BUFFER; + if (barriers & GL_SHADER_STORAGE_BARRIER_BIT) + flags |= PIPE_BARRIER_SHADER_BUFFER; + + if (flags && pipe->memory_barrier) + pipe->memory_barrier(pipe, flags); +} void GLAPIENTRY _mesa_TextureBarrierNV(void) @@ -44,7 +107,7 @@ _mesa_TextureBarrierNV(void) return; } - st_TextureBarrier(ctx); + ctx->pipe->texture_barrier(ctx->pipe, PIPE_TEXTURE_BARRIER_SAMPLER); } void GLAPIENTRY @@ -52,7 +115,7 @@ _mesa_MemoryBarrier(GLbitfield barriers) { GET_CURRENT_CONTEXT(ctx); - st_MemoryBarrier(ctx, barriers); + memory_barrier(ctx, barriers); } static ALWAYS_INLINE void @@ -76,7 +139,7 @@ memory_barrier_by_region(struct gl_context *ctx, GLbitfield barriers, * barriers allowed by glMemoryBarrierByRegion should be activated." */ if (barriers == GL_ALL_BARRIER_BITS) { - st_MemoryBarrier(ctx, all_allowed_bits); + memory_barrier(ctx, all_allowed_bits); return; } @@ -91,7 +154,7 @@ memory_barrier_by_region(struct gl_context *ctx, GLbitfield barriers, "glMemoryBarrierByRegion(unsupported barrier bit"); } - st_MemoryBarrier(ctx, barriers); + memory_barrier(ctx, barriers); } void GLAPIENTRY @@ -119,7 +182,7 @@ _mesa_BlendBarrier(void) return; } - st_FramebufferFetchBarrier(ctx); + ctx->pipe->texture_barrier(ctx->pipe, PIPE_TEXTURE_BARRIER_FRAMEBUFFER); } void GLAPIENTRY @@ -133,5 +196,5 @@ _mesa_FramebufferFetchBarrierEXT(void) return; } - st_FramebufferFetchBarrier(ctx); + ctx->pipe->texture_barrier(ctx->pipe, PIPE_TEXTURE_BARRIER_FRAMEBUFFER); } diff --git a/src/mesa/meson.build b/src/mesa/meson.build index be9e0af3b44..52cd3d8a95d 100644 --- a/src/mesa/meson.build +++ b/src/mesa/meson.build @@ -371,8 +371,6 @@ files_libmesa = files( 'state_tracker/st_cb_syncobj.h', 'state_tracker/st_cb_texture.c', 'state_tracker/st_cb_texture.h', - 'state_tracker/st_cb_texturebarrier.c', - 'state_tracker/st_cb_texturebarrier.h', 'state_tracker/st_cb_viewport.c', 'state_tracker/st_cb_viewport.h', 'state_tracker/st_cb_xformfb.c', diff --git a/src/mesa/state_tracker/st_cb_texturebarrier.c b/src/mesa/state_tracker/st_cb_texturebarrier.c deleted file mode 100644 index e1e50da9b23..00000000000 --- a/src/mesa/state_tracker/st_cb_texturebarrier.c +++ /dev/null @@ -1,132 +0,0 @@ -/************************************************************************** - * - * Copyright 2011 Marek Olšák <[email protected]> - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - **************************************************************************/ - - -/** - * glTextureBarrierNV function - * - * \author Marek Olšák - */ - - - -#include "main/context.h" - -#include "pipe/p_context.h" -#include "pipe/p_defines.h" -#include "st_context.h" -#include "st_cb_texturebarrier.h" - - -/** - * Called via ctx->Driver.TextureBarrier() - */ -void -st_TextureBarrier(struct gl_context *ctx) -{ - struct pipe_context *pipe = st_context(ctx)->pipe; - - pipe->texture_barrier(pipe, PIPE_TEXTURE_BARRIER_SAMPLER); -} - - -/** - * Called via ctx->Driver.FramebufferFetchBarrier() - */ -void -st_FramebufferFetchBarrier(struct gl_context *ctx) -{ - struct pipe_context *pipe = st_context(ctx)->pipe; - - pipe->texture_barrier(pipe, PIPE_TEXTURE_BARRIER_FRAMEBUFFER); -} - - -/** - * Called via ctx->Driver.MemoryBarrier() - */ -void -st_MemoryBarrier(struct gl_context *ctx, GLbitfield barriers) -{ - struct pipe_context *pipe = st_context(ctx)->pipe; - unsigned flags = 0; - - if (barriers & GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT) - flags |= PIPE_BARRIER_VERTEX_BUFFER; - if (barriers & GL_ELEMENT_ARRAY_BARRIER_BIT) - flags |= PIPE_BARRIER_INDEX_BUFFER; - if (barriers & GL_UNIFORM_BARRIER_BIT) - flags |= PIPE_BARRIER_CONSTANT_BUFFER; - if (barriers & GL_TEXTURE_FETCH_BARRIER_BIT) - flags |= PIPE_BARRIER_TEXTURE; - if (barriers & GL_SHADER_IMAGE_ACCESS_BARRIER_BIT) - flags |= PIPE_BARRIER_IMAGE; - if (barriers & GL_COMMAND_BARRIER_BIT) - flags |= PIPE_BARRIER_INDIRECT_BUFFER; - if (barriers & GL_PIXEL_BUFFER_BARRIER_BIT) { - /* The PBO may be - * (1) bound as a texture for PBO uploads, or - * (2) accessed by the CPU via transfer ops. - * For case (2), we assume automatic flushing by the driver. - */ - flags |= PIPE_BARRIER_TEXTURE; - } - if (barriers & GL_TEXTURE_UPDATE_BARRIER_BIT) { - /* GL_TEXTURE_UPDATE_BARRIER_BIT: - * Texture updates translate to: - * (1) texture transfers to/from the CPU, - * (2) texture as blit destination, or - * (3) texture as framebuffer. - * Some drivers may handle these automatically, and can ignore the bit. - */ - flags |= PIPE_BARRIER_UPDATE_TEXTURE; - } - if (barriers & GL_BUFFER_UPDATE_BARRIER_BIT) { - /* GL_BUFFER_UPDATE_BARRIER_BIT: - * Buffer updates translate to - * (1) buffer transfers to/from the CPU, - * (2) resource copies and clears. - * Some drivers may handle these automatically, and can ignore the bit. - */ - flags |= PIPE_BARRIER_UPDATE_BUFFER; - } - if (barriers & GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT) - flags |= PIPE_BARRIER_MAPPED_BUFFER; - if (barriers & GL_QUERY_BUFFER_BARRIER_BIT) - flags |= PIPE_BARRIER_QUERY_BUFFER; - if (barriers & GL_FRAMEBUFFER_BARRIER_BIT) - flags |= PIPE_BARRIER_FRAMEBUFFER; - if (barriers & GL_TRANSFORM_FEEDBACK_BARRIER_BIT) - flags |= PIPE_BARRIER_STREAMOUT_BUFFER; - if (barriers & GL_ATOMIC_COUNTER_BARRIER_BIT) - flags |= PIPE_BARRIER_SHADER_BUFFER; - if (barriers & GL_SHADER_STORAGE_BARRIER_BIT) - flags |= PIPE_BARRIER_SHADER_BUFFER; - - if (flags && pipe->memory_barrier) - pipe->memory_barrier(pipe, flags); -} diff --git a/src/mesa/state_tracker/st_cb_texturebarrier.h b/src/mesa/state_tracker/st_cb_texturebarrier.h deleted file mode 100644 index d6bb516465d..00000000000 --- a/src/mesa/state_tracker/st_cb_texturebarrier.h +++ /dev/null @@ -1,35 +0,0 @@ -/************************************************************************** - * - * Copyright 2011 Marek Olšák <[email protected]> - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - **************************************************************************/ - -#ifndef ST_CB_TEXTUREBARRIER_H -#define ST_CB_TEXTUREBARRIER_H - -void st_TextureBarrier(struct gl_context *ctx); -void st_FramebufferFetchBarrier(struct gl_context *ctx); -void st_MemoryBarrier(struct gl_context *ctx, GLbitfield barriers); - -#endif
