David,

__declspec(thread) on DLLs is not supported on XP.  This must not go in or Mesa 
DLL's won't load correctly on XP.

This is why there is no abstraction for compiler TLS. It's not very portable 
yet.  So I rather we didn't use a at all.


TLS is not enough to make this code safe neither.  The caller could do

  printf("%s %s\n", util_dump_transfer_flags(foo), 
util_dump_transfer_flags(boo));

which would print wrong results.


Please just have the callers pass in a buffer as parameter.


Jose



________________________________________
From: mesa-dev <mesa-dev-boun...@lists.freedesktop.org> on behalf of Brian Paul 
<bri...@vmware.com>
Sent: 12 November 2014 16:09
To: kusmab...@gmail.com; David Heidelberg
Cc: mesa-dev@lists.freedesktop.org
Subject: Re: [Mesa-dev] [PATCH v3 6/9] gallium/auxiliary: add dump functions 
for bind and transfer flags

On 11/12/2014 05:48 AM, Erik Faye-Lund wrote:
> On Sun, Nov 2, 2014 at 7:32 PM, David Heidelberg <da...@ixit.cz> wrote:
>> v2: rename and extend support with code for C11 and MSVC (thanks to Brian)
>>
>> Signed-off-by: David Heidelberg <da...@ixit.cz>
>> ---
>>   src/gallium/auxiliary/util/u_dump.h         |  6 ++
>>   src/gallium/auxiliary/util/u_dump_defines.c | 86
>> +++++++++++++++++++++++++++++
>>   2 files changed, 92 insertions(+)
>>
>> diff --git a/src/gallium/auxiliary/util/u_dump.h
>> b/src/gallium/auxiliary/util/u_dump.h
>> index 58e7dfd..84ba1ed 100644
>> --- a/src/gallium/auxiliary/util/u_dump.h
>> +++ b/src/gallium/auxiliary/util/u_dump.h
>> @@ -88,6 +88,12 @@ util_dump_tex_filter(unsigned value, boolean shortened);
>>   const char *
>>   util_dump_query_type(unsigned value, boolean shortened);
>>   +const char *
>> +util_dump_bind_flags(unsigned flags);
>> +
>> +const char *
>> +util_dump_transfer_flags(unsigned flags);
>> +
>>    /*
>>    * p_state.h, through a FILE
>> diff --git a/src/gallium/auxiliary/util/u_dump_defines.c
>> b/src/gallium/auxiliary/util/u_dump_defines.c
>> index 03fd15d..20ae6c0 100644
>> --- a/src/gallium/auxiliary/util/u_dump_defines.c
>> +++ b/src/gallium/auxiliary/util/u_dump_defines.c
>> @@ -61,6 +61,36 @@ util_dump_enum_continuous(unsigned value,
>>      return names[value];
>>   }
>>   +static const char *
>> +util_dump_flags(unsigned flags, const char *prefix,
>> +                unsigned num_names,
>> +                const char **names)
>> +{
>> +#if __STDC_VERSION__ >= 201112 && !defined __STDC_NO_THREADS__
>> +   static _Thread_local char str[256];
>> +#elif defined(PIPE_CC_GCC)
>> +   static __thread char str[256];
>> +#elif defined(PIPE_CC_MSVC)
>> +   static __declspec(thread) char str[256];
>> +#else
>> +#error "Unsupported compiler: please find how to implement thread local
>> storage on it"
>> +#endif
>
> Isn't failing compilation a bit aggressive? Can't we just lose the
> functionality instead?

Maybe there should be a macro in p_compiler.h which defines the
thread-specific storage qualifier so we don't need all the #ifdef stuff
in the util code.

-Brian


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Ddev&d=AAIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=zfmBZnnVGHeYde45pMKNnVyzeaZbdIqVLprmZCM2zzE&m=Ng6XeIFU6f0YuWJvZ81AjIa3CO1R3sGWh4-djyNlzQo&s=_TKab-WfP0G1mGPZlWKGh-wL0miqELhP4M-3srNmffg&e=
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to