From 5839a7d64a21a1bfb7425895f793d1fbb52a4e12 Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Mon, 29 Jun 2020 12:02:29 +0200 Subject: [PATCH] etnaviv: introduce struct etna_compiler This struct will be used to for state saved across compiler invocations. Signed-off-by: Christian Gmeiner Reviewed-by: Lucas Stach Part-of: --- src/gallium/drivers/etnaviv/Makefile.sources | 1 + .../drivers/etnaviv/etnaviv_compiler.c | 42 +++++++++++++++++++ .../drivers/etnaviv/etnaviv_compiler.h | 13 ++++++ src/gallium/drivers/etnaviv/etnaviv_screen.c | 7 ++++ src/gallium/drivers/etnaviv/etnaviv_screen.h | 1 + src/gallium/drivers/etnaviv/meson.build | 1 + 6 files changed, 65 insertions(+) create mode 100644 src/gallium/drivers/etnaviv/etnaviv_compiler.c diff --git a/src/gallium/drivers/etnaviv/Makefile.sources b/src/gallium/drivers/etnaviv/Makefile.sources index f765088117d..32fcd799ac1 100644 --- a/src/gallium/drivers/etnaviv/Makefile.sources +++ b/src/gallium/drivers/etnaviv/Makefile.sources @@ -16,6 +16,7 @@ C_SOURCES := \ etnaviv_blt.h \ etnaviv_clear_blit.c \ etnaviv_clear_blit.h \ + etnaviv_compiler.c \ etnaviv_compiler.h \ etnaviv_compiler_nir.c \ etnaviv_compiler_nir_emit.c \ diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler.c b/src/gallium/drivers/etnaviv/etnaviv_compiler.c new file mode 100644 index 00000000000..aa6b2c6d29b --- /dev/null +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler.c @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2020 Etnaviv Project + * + * 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 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. + * + * Authors: + * Christian Gmeiner + */ + +#include "etnaviv_compiler.h" +#include "util/ralloc.h" + +struct etna_compiler * +etna_compiler_create(void) +{ + struct etna_compiler *compiler = rzalloc(NULL, struct etna_compiler); + + return compiler; +} + +void +etna_compiler_destroy(const struct etna_compiler *compiler) +{ + ralloc_free((void *)compiler); +} diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler.h b/src/gallium/drivers/etnaviv/etnaviv_compiler.h index b7feeb6d49b..40409c68d34 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_compiler.h +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler.h @@ -44,6 +44,13 @@ #define ETNA_MAX_DEPTH (32) #define ETNA_MAX_INSTRUCTIONS (2048) +/** + * Compiler state saved across compiler invocations, for any expensive global + * setup. + */ +struct etna_compiler { +}; + /* compiler output per input/output */ struct etna_shader_inout { int reg; /* native register */ @@ -124,6 +131,12 @@ struct etna_shader_link_info { int pcoord_varying_comp_ofs; }; +struct etna_compiler * +etna_compiler_create(void); + +void +etna_compiler_destroy(const struct etna_compiler *compiler); + bool etna_compile_shader(struct etna_shader_variant *shader); diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c b/src/gallium/drivers/etnaviv/etnaviv_screen.c index 1067c2c9ef5..5a03b86c327 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_screen.c +++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c @@ -88,6 +88,9 @@ etna_screen_destroy(struct pipe_screen *pscreen) if (screen->perfmon) etna_perfmon_del(screen->perfmon); + if (screen->compiler) + etna_compiler_destroy(screen->compiler); + if (screen->pipe) etna_pipe_del(screen->pipe); @@ -1041,6 +1044,10 @@ etna_screen_create(struct etna_device *dev, struct etna_gpu *gpu, pscreen->is_format_supported = etna_screen_is_format_supported; pscreen->query_dmabuf_modifiers = etna_screen_query_dmabuf_modifiers; + screen->compiler = etna_compiler_create(); + if (!screen->compiler) + goto fail; + etna_fence_screen_init(pscreen); etna_query_screen_init(pscreen); etna_resource_screen_init(pscreen); diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.h b/src/gallium/drivers/etnaviv/etnaviv_screen.h index 1bdae5a163a..59e186fb12a 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_screen.h +++ b/src/gallium/drivers/etnaviv/etnaviv_screen.h @@ -85,6 +85,7 @@ struct etna_screen { uint32_t drm_version; + struct etna_compiler *compiler; nir_shader_compiler_options options; }; diff --git a/src/gallium/drivers/etnaviv/meson.build b/src/gallium/drivers/etnaviv/meson.build index 7eaa4cca92c..7b7ce26056e 100644 --- a/src/gallium/drivers/etnaviv/meson.build +++ b/src/gallium/drivers/etnaviv/meson.build @@ -35,6 +35,7 @@ files_etnaviv = files( 'etnaviv_blt.h', 'etnaviv_clear_blit.c', 'etnaviv_clear_blit.h', + 'etnaviv_compiler.c', 'etnaviv_compiler.h', 'etnaviv_compiler_nir.c', 'etnaviv_compiler_nir_emit.c', -- 2.30.2