[Mesa-dev] [PATCH 3/4] radeonsi: don't lock shader cache mutex during compilation

Marek Olšák maraeo at gmail.com
Sat Jul 2 17:40:19 UTC 2016


On Sat, Jul 2, 2016 at 10:51 AM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> On 29.06.2016 18:32, Marek Olšák wrote:
>>
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> to allow multiple shaders to be compiled simultaneously.
>> ---
>>   src/gallium/drivers/radeonsi/si_state_shaders.c | 21
>> ++++++++++++++++-----
>>   1 file changed, 16 insertions(+), 5 deletions(-)
>>
>> diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c
>> b/src/gallium/drivers/radeonsi/si_state_shaders.c
>> index 0fc3db9..e433055 100644
>> --- a/src/gallium/drivers/radeonsi/si_state_shaders.c
>> +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
>> @@ -179,8 +179,14 @@ static bool si_shader_cache_insert_shader(struct
>> si_screen *sscreen,
>>                                           void *tgsi_binary,
>>                                           struct si_shader *shader)
>>   {
>> -       void *hw_binary = si_get_shader_binary(shader);
>> +       void *hw_binary;
>> +       struct hash_entry *entry;
>>
>> +       entry = _mesa_hash_table_search(sscreen->shader_cache,
>> tgsi_binary);
>> +       if (entry)
>> +               return false; /* already added */
>> +
>> +       hw_binary = si_get_shader_binary(shader);
>>         if (!hw_binary)
>>                 return false;
>>
>> @@ -1091,7 +1097,10 @@ void si_init_shader_selector_async(void *job, int
>> thread_index)
>>                 if (tgsi_binary &&
>>                     si_shader_cache_load_shader(sscreen, tgsi_binary,
>> shader)) {
>>                         FREE(tgsi_binary);
>> +                       pipe_mutex_unlock(sscreen->shader_cache_mutex);
>>                 } else {
>> +                       pipe_mutex_unlock(sscreen->shader_cache_mutex);
>> +
>>                         /* Compile the shader if it hasn't been loaded
>> from the cache. */
>>                         if (si_compile_tgsi_shader(sscreen, tm, shader,
>> false,
>>                                                    debug) != 0) {
>
>
> It's hard to tell in the context of the diffs, but isn't there a left-over
> pipe_mutex_unlock in the error path here?

Yes, you're right. Thanks. I'll remove that unlock call before pushing.

Marek


More information about the mesa-dev mailing list