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

Axel Davy davyaxel0 at gmail.com
Wed Mar 6 19:27:09 UTC 2019


On 06/03/2019 20:13, Dylan Baker wrote:
> 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

Well, it looks like to be already in the 19.0 tree:
https://cgit.freedesktop.org/mesa/mesa/commit/?h=19.0&id=d7433c22e6c9624ca5275a3cd35be79caed9fffc


Yours,


Axel Davy



More information about the mesa-dev mailing list