From: Dave Airlie Date: Tue, 27 Aug 2019 03:19:00 +0000 (+1000) Subject: llvmpipe: introduce compute shader context X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=add0b151f524aa800d574ebfeddfb77a06f4e937;p=mesa.git llvmpipe: introduce compute shader context The compute shader will need it's own context like the frag shader has, this just introduces the framework struct and allocates/frees for it in the right places. Reviewed-by: Roland Scheidegger --- diff --git a/src/gallium/drivers/llvmpipe/Makefile.sources b/src/gallium/drivers/llvmpipe/Makefile.sources index 4312ddc07f1..9b2fe288346 100644 --- a/src/gallium/drivers/llvmpipe/Makefile.sources +++ b/src/gallium/drivers/llvmpipe/Makefile.sources @@ -53,6 +53,8 @@ C_SOURCES := \ lp_state_blend.c \ lp_state_clip.c \ lp_state_derived.c \ + lp_state_cs.c \ + lp_state_cs.h \ lp_state_fs.c \ lp_state_fs.h \ lp_state_gs.c \ diff --git a/src/gallium/drivers/llvmpipe/lp_context.c b/src/gallium/drivers/llvmpipe/lp_context.c index 016416e0116..c60fe9c7ad5 100644 --- a/src/gallium/drivers/llvmpipe/lp_context.c +++ b/src/gallium/drivers/llvmpipe/lp_context.c @@ -59,6 +59,9 @@ static void llvmpipe_destroy( struct pipe_context *pipe ) lp_print_counters(); + if (llvmpipe->csctx) { + lp_csctx_destroy(llvmpipe->csctx); + } if (llvmpipe->blitter) { util_blitter_destroy(llvmpipe->blitter); } @@ -199,6 +202,9 @@ llvmpipe_create_context(struct pipe_screen *screen, void *priv, if (!llvmpipe->setup) goto fail; + llvmpipe->csctx = lp_csctx_create( &llvmpipe->pipe ); + if (!llvmpipe->csctx) + goto fail; llvmpipe->pipe.stream_uploader = u_upload_create_default(&llvmpipe->pipe); if (!llvmpipe->pipe.stream_uploader) goto fail; diff --git a/src/gallium/drivers/llvmpipe/lp_context.h b/src/gallium/drivers/llvmpipe/lp_context.h index 889228861d7..b82cb880e43 100644 --- a/src/gallium/drivers/llvmpipe/lp_context.h +++ b/src/gallium/drivers/llvmpipe/lp_context.h @@ -40,6 +40,7 @@ #include "lp_jit.h" #include "lp_setup.h" #include "lp_state_fs.h" +#include "lp_state_cs.h" #include "lp_state_setup.h" @@ -149,6 +150,8 @@ struct llvmpipe_context { struct lp_setup_variant_list_item setup_variants_list; unsigned nr_setup_variants; + struct lp_cs_context *csctx; + /** Conditional query object and mode */ struct pipe_query *render_cond_query; enum pipe_render_cond_flag render_cond_mode; diff --git a/src/gallium/drivers/llvmpipe/lp_state_cs.c b/src/gallium/drivers/llvmpipe/lp_state_cs.c new file mode 100644 index 00000000000..d6faa77598c --- /dev/null +++ b/src/gallium/drivers/llvmpipe/lp_state_cs.c @@ -0,0 +1,45 @@ +/************************************************************************** + * + * Copyright 2019 Red Hat. + * 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, sublicense, + * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS 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. + * + **************************************************************************/ +#include "util/u_memory.h" + +#include "lp_state_cs.h" + +void +lp_csctx_destroy(struct lp_cs_context *csctx) +{ + FREE(csctx); +} + +struct lp_cs_context *lp_csctx_create(struct pipe_context *pipe) +{ + struct lp_cs_context *csctx; + + csctx = CALLOC_STRUCT(lp_cs_context); + if (!csctx) + return NULL; + + csctx->pipe = pipe; + return csctx; +} diff --git a/src/gallium/drivers/llvmpipe/lp_state_cs.h b/src/gallium/drivers/llvmpipe/lp_state_cs.h new file mode 100644 index 00000000000..c65cc165e38 --- /dev/null +++ b/src/gallium/drivers/llvmpipe/lp_state_cs.h @@ -0,0 +1,40 @@ +/************************************************************************** + * + * Copyright 2019 Red Hat. + * 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, sublicense, + * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS 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 LP_STATE_CS_H +#define LP_STATE_CS_H + +#include "os/os_thread.h" +#include "util/u_thread.h" +#include "pipe/p_state.h" + +struct lp_cs_context { + struct pipe_context *pipe; +}; + +struct lp_cs_context *lp_csctx_create(struct pipe_context *pipe); +void lp_csctx_destroy(struct lp_cs_context *csctx); + +#endif diff --git a/src/gallium/drivers/llvmpipe/meson.build b/src/gallium/drivers/llvmpipe/meson.build index 7eb752c8e97..09626a31d95 100644 --- a/src/gallium/drivers/llvmpipe/meson.build +++ b/src/gallium/drivers/llvmpipe/meson.build @@ -73,6 +73,8 @@ files_llvmpipe = files( 'lp_state_blend.c', 'lp_state_clip.c', 'lp_state_derived.c', + 'lp_state_cs.c', + 'lp_state_cs.h', 'lp_state_fs.c', 'lp_state_fs.h', 'lp_state_gs.c',