Module: Mesa Branch: main Commit: 5ca93f3599a4c12fc7d4a58d2f6d9dc51f3a1432 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5ca93f3599a4c12fc7d4a58d2f6d9dc51f3a1432
Author: Boris Brezillon <[email protected]> Date: Wed Aug 4 12:28:48 2021 +0200 panfrost: Get rid of all _packed structs in pan_context.h Such that pan_context.h remains generic even after the per-gen XML switch. Signed-off-by: Boris Brezillon <[email protected]> Reviewed-by: Alyssa Rosenzweig <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12551> --- src/gallium/drivers/panfrost/pan_cmdstream.c | 64 ++++++++++++++++++++++++++-- src/gallium/drivers/panfrost/pan_context.c | 13 ------ src/gallium/drivers/panfrost/pan_context.h | 44 +++---------------- 3 files changed, 67 insertions(+), 54 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index da87963bf84..fe59d8998c5 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -47,6 +47,44 @@ #include "pan_indirect_dispatch.h" #include "pan_blitter.h" +struct panfrost_rasterizer { + struct pipe_rasterizer_state base; + + /* Partially packed RSD words */ + struct mali_multisample_misc_packed multisample; + struct mali_stencil_mask_misc_packed stencil_misc; +}; + +struct panfrost_zsa_state { + struct pipe_depth_stencil_alpha_state base; + + /* Is any depth, stencil, or alpha testing enabled? */ + bool enabled; + + /* Mask of PIPE_CLEAR_{DEPTH,STENCIL} written */ + unsigned draws; + + /* Prepacked words from the RSD */ + struct mali_multisample_misc_packed rsd_depth; + struct mali_stencil_mask_misc_packed rsd_stencil; + struct mali_stencil_packed stencil_front, stencil_back; +}; + +struct panfrost_sampler_state { + struct pipe_sampler_state base; + struct mali_midgard_sampler_packed hw; +}; + +/* Misnomer: Sampler view corresponds to textures, not samplers */ + +struct panfrost_sampler_view { + struct pipe_sampler_view base; + struct panfrost_pool_ref state; + struct mali_bifrost_texture_packed bifrost_descriptor; + mali_ptr texture_bo; + uint64_t modifier; +}; + /* Statically assert that PIPE_* enums match the hardware enums. * (As long as they match, we don't need to translate them.) */ @@ -499,10 +537,14 @@ panfrost_emit_frag_shader(struct panfrost_context *ctx, #endif /* Merge with CSO state and upload */ - if (panfrost_fs_required(fs, ctx->blend, &ctx->pipe_framebuffer, zsa)) - pan_merge(rsd, fs->partial_rsd, RENDERER_STATE); - else + if (panfrost_fs_required(fs, ctx->blend, &ctx->pipe_framebuffer, zsa)) { + struct mali_renderer_state_packed *partial_rsd = + (struct mali_renderer_state_packed *)&fs->partial_rsd; + STATIC_ASSERT(sizeof(fs->partial_rsd) == sizeof(*partial_rsd)); + pan_merge(rsd, *partial_rsd, RENDERER_STATE); + } else { pan_merge_empty_fs(&rsd); + } /* Word 8, 9 Misc state */ rsd.opaque[8] |= zsa->rsd_depth.opaque[0] @@ -3447,7 +3489,8 @@ prepare_rsd(struct panfrost_device *dev, struct panfrost_shader_state *state, struct panfrost_pool *pool, bool upload) { - struct mali_renderer_state_packed *out = &state->partial_rsd; + struct mali_renderer_state_packed *out = + (struct mali_renderer_state_packed *)&state->partial_rsd; if (upload) { struct panfrost_ptr ptr = @@ -3513,6 +3556,18 @@ init_batch(struct panfrost_batch *batch) #endif } +static void +panfrost_sampler_view_destroy( + struct pipe_context *pctx, + struct pipe_sampler_view *pview) +{ + struct panfrost_sampler_view *view = (struct panfrost_sampler_view *) pview; + + pipe_resource_reference(&pview->texture, NULL); + panfrost_bo_unreference(view->state.bo); + ralloc_free(view); +} + static void context_init(struct pipe_context *pipe) { @@ -3523,6 +3578,7 @@ context_init(struct pipe_context *pipe) pipe->create_rasterizer_state = panfrost_create_rasterizer_state; pipe->create_depth_stencil_alpha_state = panfrost_create_depth_stencil_state; pipe->create_sampler_view = panfrost_create_sampler_view; + pipe->sampler_view_destroy = panfrost_sampler_view_destroy; pipe->create_sampler_state = panfrost_create_sampler_state; pipe->create_blend_state = panfrost_create_blend_state; diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index ad94015de6c..ea6d313deec 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -653,18 +653,6 @@ panfrost_set_sampler_views( ctx->sampler_view_count[shader] = new_nr; } -static void -panfrost_sampler_view_destroy( - struct pipe_context *pctx, - struct pipe_sampler_view *pview) -{ - struct panfrost_sampler_view *view = (struct panfrost_sampler_view *) pview; - - pipe_resource_reference(&pview->texture, NULL); - panfrost_bo_unreference(view->state.bo); - ralloc_free(view); -} - static void panfrost_set_shader_buffers( struct pipe_context *pctx, @@ -1065,7 +1053,6 @@ panfrost_create_context(struct pipe_screen *screen, void *priv, unsigned flags) gallium->set_stencil_ref = panfrost_set_stencil_ref; gallium->set_sampler_views = panfrost_set_sampler_views; - gallium->sampler_view_destroy = panfrost_sampler_view_destroy; gallium->bind_rasterizer_state = panfrost_bind_rasterizer_state; gallium->delete_rasterizer_state = panfrost_generic_cso_delete; diff --git a/src/gallium/drivers/panfrost/pan_context.h b/src/gallium/drivers/panfrost/pan_context.h index b8debbaeeae..82486f7f149 100644 --- a/src/gallium/drivers/panfrost/pan_context.h +++ b/src/gallium/drivers/panfrost/pan_context.h @@ -222,13 +222,7 @@ struct panfrost_context { /* Corresponds to the CSO */ -struct panfrost_rasterizer { - struct pipe_rasterizer_state base; - - /* Partially packed RSD words */ - struct mali_multisample_misc_packed multisample; - struct mali_stencil_mask_misc_packed stencil_misc; -}; +struct panfrost_rasterizer; /* Linked varyings */ struct pan_linkage { @@ -247,6 +241,8 @@ struct pan_linkage { uint32_t stride; }; +#define RSD_WORDS 16 + /* Variants bundle together to form the backing CSO, bundling multiple * shaders with varying emulated features baked in */ @@ -259,7 +255,7 @@ struct panfrost_shader_state { struct panfrost_pool_ref bin, state; /* For fragment shaders, a prepared (but not uploaded RSD) */ - struct mali_renderer_state_packed partial_rsd; + uint32_t partial_rsd[RSD_WORDS]; struct pan_shader_info info; @@ -319,35 +315,9 @@ struct panfrost_vertex_state { unsigned formats[PIPE_MAX_ATTRIBS]; }; -struct panfrost_zsa_state { - struct pipe_depth_stencil_alpha_state base; - - /* Is any depth, stencil, or alpha testing enabled? */ - bool enabled; - - /* Mask of PIPE_CLEAR_{DEPTH,STENCIL} written */ - unsigned draws; - - /* Prepacked words from the RSD */ - struct mali_multisample_misc_packed rsd_depth; - struct mali_stencil_mask_misc_packed rsd_stencil; - struct mali_stencil_packed stencil_front, stencil_back; -}; - -struct panfrost_sampler_state { - struct pipe_sampler_state base; - struct mali_midgard_sampler_packed hw; -}; - -/* Misnomer: Sampler view corresponds to textures, not samplers */ - -struct panfrost_sampler_view { - struct pipe_sampler_view base; - struct panfrost_pool_ref state; - struct mali_bifrost_texture_packed bifrost_descriptor; - mali_ptr texture_bo; - uint64_t modifier; -}; +struct panfrost_zsa_state; +struct panfrost_sampler_state; +struct panfrost_sampler_view; static inline struct panfrost_context * pan_context(struct pipe_context *pcontext)
