From 3a4524e2fece57502c93318351534129874c37f9 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Tue, 10 Mar 2020 15:41:56 -0400 Subject: [PATCH] panfrost: Promote midgard_program to panfrost/util We'll want Bifrost to reuse the same linking mechanisms for the most part. Signed-off-by: Alyssa Rosenzweig Part-of: --- src/gallium/drivers/panfrost/pan_assemble.c | 2 +- .../drivers/panfrost/pan_blend_shaders.c | 2 +- src/panfrost/bifrost/meson.build | 2 +- src/panfrost/midgard/midgard_compile.c | 2 +- src/panfrost/midgard/midgard_compile.h | 76 +------------------ src/panfrost/util/meson.build | 2 +- src/panfrost/util/pan_ir.h | 75 ++++++++++++++++++ 7 files changed, 82 insertions(+), 79 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_assemble.c b/src/gallium/drivers/panfrost/pan_assemble.c index f8874cee60a..44e8c7af561 100644 --- a/src/gallium/drivers/panfrost/pan_assemble.c +++ b/src/gallium/drivers/panfrost/pan_assemble.c @@ -60,7 +60,7 @@ panfrost_shader_compile(struct panfrost_context *ctx, /* Call out to Midgard compiler given the above NIR */ - midgard_program program = { + panfrost_program program = { .alpha_ref = state->alpha_state.ref_value }; diff --git a/src/gallium/drivers/panfrost/pan_blend_shaders.c b/src/gallium/drivers/panfrost/pan_blend_shaders.c index a293c6bc3a8..0a312f71e23 100644 --- a/src/gallium/drivers/panfrost/pan_blend_shaders.c +++ b/src/gallium/drivers/panfrost/pan_blend_shaders.c @@ -181,7 +181,7 @@ panfrost_compile_blend_shader( /* Compile the built shader */ - midgard_program program; + panfrost_program program; midgard_compile_shader_nir(shader, &program, true, rt, screen->gpu_id, false); /* Allow us to patch later */ diff --git a/src/panfrost/bifrost/meson.build b/src/panfrost/bifrost/meson.build index bde656933f2..7b374cc4d10 100644 --- a/src/panfrost/bifrost/meson.build +++ b/src/panfrost/bifrost/meson.build @@ -43,7 +43,7 @@ bifrost_nir_algebraic_c = custom_target( libpanfrost_bifrost = static_library( 'panfrost_bifrost', [libpanfrost_bifrost_files, bifrost_nir_algebraic_c], - include_directories : [inc_common, inc_include, inc_src], + include_directories : [inc_common, inc_include, inc_src, inc_panfrost_hw], dependencies: [idep_nir], link_with: [libpanfrost_util], c_args : [c_vis_args, no_override_init_args], diff --git a/src/panfrost/midgard/midgard_compile.c b/src/panfrost/midgard/midgard_compile.c index a312f5e1cfa..049f34d8ca7 100644 --- a/src/panfrost/midgard/midgard_compile.c +++ b/src/panfrost/midgard/midgard_compile.c @@ -2751,7 +2751,7 @@ mir_add_writeout_loops(compiler_context *ctx) } int -midgard_compile_shader_nir(nir_shader *nir, midgard_program *program, bool is_blend, unsigned blend_rt, unsigned gpu_id, bool shaderdb) +midgard_compile_shader_nir(nir_shader *nir, panfrost_program *program, bool is_blend, unsigned blend_rt, unsigned gpu_id, bool shaderdb) { struct util_dynarray *compiled = &program->compiled; diff --git a/src/panfrost/midgard/midgard_compile.h b/src/panfrost/midgard/midgard_compile.h index 016502b319e..a995d12771a 100644 --- a/src/panfrost/midgard/midgard_compile.h +++ b/src/panfrost/midgard/midgard_compile.h @@ -27,82 +27,10 @@ #include "compiler/nir/nir.h" #include "util/u_dynarray.h" #include "panfrost-job.h" - -/* Define the general compiler entry point */ - -#define MAX_SYSVAL_COUNT 32 - -/* Allow 2D of sysval IDs, while allowing nonparametric sysvals to equal - * their class for equal comparison */ - -#define PAN_SYSVAL(type, no) (((no) << 16) | PAN_SYSVAL_##type) -#define PAN_SYSVAL_TYPE(sysval) ((sysval) & 0xffff) -#define PAN_SYSVAL_ID(sysval) ((sysval) >> 16) - -/* Define some common types. We start at one for easy indexing of hash - * tables internal to the compiler */ - -enum { - PAN_SYSVAL_VIEWPORT_SCALE = 1, - PAN_SYSVAL_VIEWPORT_OFFSET = 2, - PAN_SYSVAL_TEXTURE_SIZE = 3, - PAN_SYSVAL_SSBO = 4, - PAN_SYSVAL_NUM_WORK_GROUPS = 5, - PAN_SYSVAL_SAMPLER = 7, -}; - -#define PAN_TXS_SYSVAL_ID(texidx, dim, is_array) \ - ((texidx) | ((dim) << 7) | ((is_array) ? (1 << 9) : 0)) - -#define PAN_SYSVAL_ID_TO_TXS_TEX_IDX(id) ((id) & 0x7f) -#define PAN_SYSVAL_ID_TO_TXS_DIM(id) (((id) >> 7) & 0x3) -#define PAN_SYSVAL_ID_TO_TXS_IS_ARRAY(id) !!((id) & (1 << 9)) - -/* Special attribute slots for vertex builtins. Sort of arbitrary but let's be - * consistent with the blob so we can compare traces easier. */ - -enum { - PAN_VERTEX_ID = 16, - PAN_INSTANCE_ID = 17, - PAN_MAX_ATTRIBUTE -}; - -typedef struct { - int work_register_count; - int uniform_count; - int uniform_cutoff; - - /* Prepended before uniforms, mapping to SYSVAL_ names for the - * sysval */ - - unsigned sysval_count; - unsigned sysvals[MAX_SYSVAL_COUNT]; - - unsigned varyings[32]; - enum mali_format varying_type[32]; - - /* Boolean properties of the program */ - bool writes_point_size; - - int first_tag; - - struct util_dynarray compiled; - - /* For a blend shader using a constant color -- patch point. If - * negative, there's no constant. */ - - int blend_patch_offset; - - /* The number of bytes to allocate per-thread for Thread Local Storage - * (register spilling), or zero if no spilling is used */ - unsigned tls_size; - - /* IN: For a fragment shader with a lowered alpha test, the ref value */ - float alpha_ref; -} midgard_program; +#include "panfrost/util/pan_ir.h" int -midgard_compile_shader_nir(nir_shader *nir, midgard_program *program, bool is_blend, unsigned blend_rt, unsigned gpu_id, bool shaderdb); +midgard_compile_shader_nir(nir_shader *nir, panfrost_program *program, bool is_blend, unsigned blend_rt, unsigned gpu_id, bool shaderdb); /* NIR options are shared between the standalone compiler and the online * compiler. Defining it here is the simplest, though maybe not the Right diff --git a/src/panfrost/util/meson.build b/src/panfrost/util/meson.build index 63ca75697e3..0b7e426c03f 100644 --- a/src/panfrost/util/meson.build +++ b/src/panfrost/util/meson.build @@ -27,7 +27,7 @@ libpanfrost_util_files = files( libpanfrost_util = static_library( 'panfrost_util', [libpanfrost_util_files], - include_directories : [inc_common], + include_directories : [inc_common, inc_panfrost_hw], c_args : [c_vis_args, no_override_init_args], cpp_args : [cpp_vis_args], build_by_default : false, diff --git a/src/panfrost/util/pan_ir.h b/src/panfrost/util/pan_ir.h index e6cb7e5a95e..774ce26e88e 100644 --- a/src/panfrost/util/pan_ir.h +++ b/src/panfrost/util/pan_ir.h @@ -25,6 +25,81 @@ #define __PAN_IR_H #include +#include "panfrost-job.h" +#include "util/u_dynarray.h" + +/* Define the general compiler entry point */ + +#define MAX_SYSVAL_COUNT 32 + +/* Allow 2D of sysval IDs, while allowing nonparametric sysvals to equal + * their class for equal comparison */ + +#define PAN_SYSVAL(type, no) (((no) << 16) | PAN_SYSVAL_##type) +#define PAN_SYSVAL_TYPE(sysval) ((sysval) & 0xffff) +#define PAN_SYSVAL_ID(sysval) ((sysval) >> 16) + +/* Define some common types. We start at one for easy indexing of hash + * tables internal to the compiler */ + +enum { + PAN_SYSVAL_VIEWPORT_SCALE = 1, + PAN_SYSVAL_VIEWPORT_OFFSET = 2, + PAN_SYSVAL_TEXTURE_SIZE = 3, + PAN_SYSVAL_SSBO = 4, + PAN_SYSVAL_NUM_WORK_GROUPS = 5, + PAN_SYSVAL_SAMPLER = 7, +}; + +#define PAN_TXS_SYSVAL_ID(texidx, dim, is_array) \ + ((texidx) | ((dim) << 7) | ((is_array) ? (1 << 9) : 0)) + +#define PAN_SYSVAL_ID_TO_TXS_TEX_IDX(id) ((id) & 0x7f) +#define PAN_SYSVAL_ID_TO_TXS_DIM(id) (((id) >> 7) & 0x3) +#define PAN_SYSVAL_ID_TO_TXS_IS_ARRAY(id) !!((id) & (1 << 9)) + +/* Special attribute slots for vertex builtins. Sort of arbitrary but let's be + * consistent with the blob so we can compare traces easier. */ + +enum { + PAN_VERTEX_ID = 16, + PAN_INSTANCE_ID = 17, + PAN_MAX_ATTRIBUTE +}; + +typedef struct { + int work_register_count; + int uniform_count; + int uniform_cutoff; + + /* Prepended before uniforms, mapping to SYSVAL_ names for the + * sysval */ + + unsigned sysval_count; + unsigned sysvals[MAX_SYSVAL_COUNT]; + + unsigned varyings[32]; + enum mali_format varying_type[32]; + + /* Boolean properties of the program */ + bool writes_point_size; + + int first_tag; + + struct util_dynarray compiled; + + /* For a blend shader using a constant color -- patch point. If + * negative, there's no constant. */ + + int blend_patch_offset; + + /* The number of bytes to allocate per-thread for Thread Local Storage + * (register spilling), or zero if no spilling is used */ + unsigned tls_size; + + /* IN: For a fragment shader with a lowered alpha test, the ref value */ + float alpha_ref; +} panfrost_program; uint16_t pan_to_bytemask(unsigned bytes, unsigned mask); -- 2.30.2