From: Krzysztof Smiechowicz <deadwood-5tc4TXWwyLM@public.gmane.org>
To: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Subject: Re: Clean up of nv40_context->state.hw and nv40_screen->state
Date: Mon, 21 Dec 2009 10:57:13 +0100 [thread overview]
Message-ID: <4B2F4679.2030306@wp.pl> (raw)
In-Reply-To: <4B2F251B.5070807-5tc4TXWwyLM@public.gmane.org>
Krzysztof Smiechowicz pisze:
> Hi,
>
> I'm trying to find a place where objects held in
> nv40_context->state.hw[] and nv40_screen->state[] are being unreferenced
> during pipe_context destruction.
>
> Currently I'm observing that these objects are not unreferenced and
> since they hold reference to buffer objects, the buffer objects
> themselves are not unreferenced as well (for example color buffer or z
> buffer).
>
> In order to clean those references I applied the following changes:
>
> Index: nv40_screen.c
> ===================================================================
> --- nv40_screen.c (wersja 32083)
> +++ nv40_screen.c (kopia robocza)
> @@ -140,7 +140,13 @@
> nv40_screen_destroy(struct pipe_screen *pscreen)
> {
> struct nv40_screen *screen = nv40_screen(pscreen);
> + unsigned i;
>
> + for (i = 0; i < NV40_STATE_MAX; i++) {
> + if (screen->state[i])
> + so_ref(NULL, &screen->state[i]);
> + }
> +
> nouveau_resource_free(&screen->vp_exec_heap);
> nouveau_resource_free(&screen->vp_data_heap);
> nouveau_resource_free(&screen->query_heap);
> Index: nv40_context.c
> ===================================================================
> --- nv40_context.c (wersja 32083)
> +++ nv40_context.c (kopia robocza)
> @@ -25,7 +25,13 @@
> nv40_destroy(struct pipe_context *pipe)
> {
> struct nv40_context *nv40 = nv40_context(pipe);
> + unsigned i;
>
> + for (i = 0; i < NV40_STATE_MAX; i++) {
> + if (nv40->state.hw[i])
> + so_ref(NULL, &nv40->state.hw[i]);
> + }
> +
> if (nv40->draw)
> draw_destroy(nv40->draw);
> FREE(nv40);
>
>
> Is this the correct approach or did I miss where those objects are
> unreferenced?
>
A similar patch for nv40_fragprog:
Index: nv40_fragprog.c
===================================================================
--- nv40_fragprog.c (wersja 32083)
+++ nv40_fragprog.c (kopia robocza)
@@ -948,6 +948,12 @@
nv40_fragprog_destroy(struct nv40_context *nv40,
struct nv40_fragment_program *fp)
{
+ if (fp->buffer)
+ pipe_buffer_reference(&fp->buffer, NULL);
+
+ if (fp->so)
+ so_ref(NULL, &fp->so);
+
if (fp->insn_len)
FREE(fp->insn);
}
If this is the right direction, I can prepare a cumulative patch for
nv30, nv40 and nv50.
Best regards,
Krzysztof
prev parent reply other threads:[~2009-12-21 9:57 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-21 7:34 Clean up of nv40_context->state.hw and nv40_screen->state Krzysztof Smiechowicz
[not found] ` <4B2F251B.5070807-5tc4TXWwyLM@public.gmane.org>
2009-12-21 9:57 ` Krzysztof Smiechowicz [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4B2F4679.2030306@wp.pl \
--to=deadwood-5tc4txwwylm@public.gmane.org \
--cc=nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.