gallium/hud: don't use st_context_iface, use an explicit callback
authorMarek Olšák <marek.olsak@amd.com>
Sun, 27 Nov 2022 18:08:53 +0000 (13:08 -0500)
committerMarge Bot <emma+marge@anholt.net>
Fri, 9 Dec 2022 13:14:03 +0000 (13:14 +0000)
st_context_iface will be removed.

Reviewed-by: Emma Anholt <emma@anholt.net>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Yonggang Luo <luoyonggang@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20027>

src/gallium/auxiliary/hud/hud_context.c
src/gallium/auxiliary/hud/hud_context.h
src/gallium/auxiliary/hud/hud_private.h
src/gallium/frontends/dri/dri_context.c
src/gallium/frontends/glx/xlib/xm_api.c
src/gallium/frontends/nine/device9.c
src/gallium/frontends/wgl/stw_context.c

index 49d6856ec71c6227f4e3b85589edb422cf7e2db8..61f7b0dedcb0a50fd2b3071a74c6e1a8fd3c8512 100644 (file)
@@ -640,10 +640,10 @@ done:
 
    /* restore states not restored by cso */
    if (hud->st) {
-      hud->st->invalidate_state(hud->st,
-                                ST_INVALIDATE_FS_SAMPLER_VIEWS |
-                                ST_INVALIDATE_VS_CONSTBUF0 |
-                                ST_INVALIDATE_VERTEX_BUFFERS);
+      hud->st_invalidate_state(hud->st,
+                               ST_INVALIDATE_FS_SAMPLER_VIEWS |
+                               ST_INVALIDATE_VS_CONSTBUF0 |
+                               ST_INVALIDATE_VERTEX_BUFFERS);
    }
 
    pipe_surface_reference(&surf, NULL);
@@ -1673,7 +1673,8 @@ hud_unset_draw_context(struct hud_context *hud)
 
 static bool
 hud_set_draw_context(struct hud_context *hud, struct cso_context *cso,
-                     struct st_context_iface *st)
+                     void *st,
+                     void (*st_invalidate_state)(void *st, unsigned flags))
 {
    struct pipe_context *pipe = cso_get_pipe_context(cso);
 
@@ -1681,6 +1682,7 @@ hud_set_draw_context(struct hud_context *hud, struct cso_context *cso,
    hud->pipe = pipe;
    hud->cso = cso;
    hud->st = st;
+   hud->st_invalidate_state = st_invalidate_state;
 
    struct pipe_sampler_view view_templ;
    u_sampler_view_default_template(
@@ -1854,8 +1856,8 @@ hud_set_record_context(struct hud_context *hud, struct pipe_context *pipe)
  * record queries in one context and draw them in another.
  */
 struct hud_context *
-hud_create(struct cso_context *cso, struct st_context_iface *st,
-           struct hud_context *share)
+hud_create(struct cso_context *cso, struct hud_context *share,
+           void *st, void (*st_invalidate_state)(void *st, unsigned flags))
 {
    const char *share_env = debug_get_option("GALLIUM_HUD_SHARE", NULL);
    unsigned record_ctx = 0, draw_ctx = 0;
@@ -1879,7 +1881,7 @@ hud_create(struct cso_context *cso, struct st_context_iface *st,
 
       if (context_id == draw_ctx) {
          assert(!share->pipe);
-         hud_set_draw_context(share, cso, st);
+         hud_set_draw_context(share, cso, st, st_invalidate_state);
       }
 
       return share;
@@ -2002,7 +2004,7 @@ hud_create(struct cso_context *cso, struct st_context_iface *st,
    if (record_ctx == 0)
       hud_set_record_context(hud, cso_get_pipe_context(cso));
    if (draw_ctx == 0)
-      hud_set_draw_context(hud, cso, st);
+      hud_set_draw_context(hud, cso, st, st_invalidate_state);
 
    hud_parse_env_var(hud, screen, env);
    return hud;
index ed5dd5dbff22dc571a99c1a5971f696fd29bad9c..f02466acef1dcf5b2b486959b2af4df9864dc3e2 100644 (file)
@@ -33,11 +33,10 @@ struct cso_context;
 struct pipe_context;
 struct pipe_resource;
 struct util_queue_monitoring;
-struct st_context_iface;
 
 struct hud_context *
-hud_create(struct cso_context *cso, struct st_context_iface *st,
-           struct hud_context *share);
+hud_create(struct cso_context *cso, struct hud_context *share,
+           void *st, void (*st_invalidate_state)(void *st, unsigned flags));
 
 void
 hud_destroy(struct hud_context *hud, struct cso_context *cso);
index e0ebdf36c00f4b9e5e3d1a3003b6e19820557b67..fb4850851deacd5a94a893eb8e3d4f91cb6b2ecf 100644 (file)
@@ -51,7 +51,10 @@ struct hud_context {
    /* Context where the HUD is drawn: */
    struct pipe_context *pipe;
    struct cso_context *cso;
-   struct st_context_iface *st;
+
+   /* For notifying st_context to rebind states that we clobbered. */
+   void *st;
+   void (*st_invalidate_state)(void *st, unsigned flags);
 
    struct hud_batch_query_context *batch_query;
    struct list_head pane_list;
index 6b2b2753b86c524781b3cf560bbba200633ec75c..a42e8a74d267b36a998c37a6ad6d3f4c973f7731 100644 (file)
@@ -202,8 +202,9 @@ dri_create_context(struct dri_screen *screen,
    if (ctx->st->cso_context) {
       ctx->pp = pp_init(ctx->st->pipe, screen->pp_enabled, ctx->st->cso_context,
                         ctx->st);
-      ctx->hud = hud_create(ctx->st->cso_context, ctx->st,
-                            share_ctx ? share_ctx->hud : NULL);
+      ctx->hud = hud_create(ctx->st->cso_context,
+                            share_ctx ? share_ctx->hud : NULL,
+                            ctx->st, (void*)ctx->st->invalidate_state);
    }
 
    /* Do this last. */
index cdafc89dc85aa6103c0387ea5dc10f07d024ebbd..48b410528245af436210fd3557b214489f13572e 100644 (file)
@@ -1011,7 +1011,8 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list,
 
    c->st->frontend_context = (void *) c;
 
-   c->hud = hud_create(c->st->cso_context, c->st, NULL);
+   c->hud = hud_create(c->st->cso_context, NULL, c->st,
+                       (void*)c->st->invalidate_state);
 
    return c;
 
index 306c607680526b17041dad79f8b5df6b8dc0cb38..693b914a129c3632618c1aee7948f6d52d8f78d1 100644 (file)
@@ -269,7 +269,7 @@ NineDevice9_ctor( struct NineDevice9 *This,
     if (!This->cso_sw) { return E_OUTOFMEMORY; }
 
     /* Create first, it messes up our state. */
-    This->hud = hud_create(This->context.cso, NULL, NULL); /* NULL result is fine */
+    This->hud = hud_create(This->context.cso, NULL, NULL, NULL); /* NULL result is fine */
 
     This->allocator = nine_allocator_create(This, pCTX->memfd_virtualsizelimit);
 
index bfb06af854e7192b5b3f58d74045e29ad7e5a5f0..4d06c86e4e746bb2304800f3e9bed43fab34d875 100644 (file)
@@ -249,7 +249,8 @@ stw_create_context_attribs(HDC hdc, INT iLayerPlane, struct stw_context *shareCt
    ctx->st->frontend_context = (void *) ctx;
 
    if (ctx->st->cso_context) {
-      ctx->hud = hud_create(ctx->st->cso_context, ctx->st, NULL);
+      ctx->hud = hud_create(ctx->st->cso_context, NULL, ctx->st,
+                            (void*)ctx->st->invalidate_state);
    }
 
    return ctx;