[Mesa-dev] [Mesa-stable] [PATCH] st/nine: Immediately upload user provided textures

Dylan Baker dylan at pnwbakers.com
Wed Mar 6 19:13:48 UTC 2019


Quoting Axel Davy (2019-01-22 12:08:05)
> Fixes regression caused by
> 42d672fa6a766363e5703f119607f7c7975918aa
> st/nine: Bind src not dst in nine_context_box_upload
> 
> Before that patch, for user provided textures,
> when the texture was destroyed, the safety
> check for pending uploads, which according to
> the code "Following condition cannot happen currently",
> was flushing the queue and thus triggering the upload.
> 
> After the patch, the texture destruction was delayed after
> the upload. However the user frees the texture buffer,
> as it thinks the texture released.
> 
> Instead of reverting the faulty patch,
> this patch instead flushes the csmt queue right away
> after queuing the upload for this type of textures.
> This is more future-proof, as we may want to bind the
> surface for other reasons in the future.
> 
> Signed-off-by: Axel Davy <davyaxel0 at gmail.com>
> Cc: 18.3 <mesa-stable at lists.freedesktop.org>
> ---
> The regression affects Mesa 18.3.2. At least HL2 lost coast
> is affected, has artifacts and crashes at the menu.
> 
>  src/gallium/state_trackers/nine/surface9.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/src/gallium/state_trackers/nine/surface9.c b/src/gallium/state_trackers/nine/surface9.c
> index f94f7c62583..7f4ecf559e8 100644
> --- a/src/gallium/state_trackers/nine/surface9.c
> +++ b/src/gallium/state_trackers/nine/surface9.c
> @@ -668,6 +668,19 @@ NineSurface9_CopyMemToDefault( struct NineSurface9 *This,
>                              From->data, From->stride,
>                              0, /* depth = 1 */
>                              &src_box);
> +    if (From->texture == D3DRTYPE_TEXTURE) {
> +        struct NineTexture9 *tex =
> +            NineTexture9(From->base.base.container);
> +        /* D3DPOOL_SYSTEMMEM with buffer content passed
> +         * from the user: execute the upload right now.
> +         * It is possible it is enough to delay upload
> +         * until the surface refcount is 0, but the
> +         * bind refcount may not be 0, and thus the dtor
> +         * is not executed (and doesn't trigger the
> +         * pending_uploads_counter check). */
> +        if (!tex->managed_buffer)
> +            nine_csmt_process(This->base.base.device);
> +    }
>  
>      if (This->data_conversion)
>          (void) util_format_translate(This->format_conversion,
> -- 
> 2.20.1
> 

Should I pick this to 19.0 as well after it lands?

Dylan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20190306/956324b2/attachment.sig>


More information about the mesa-dev mailing list