[Mesa-dev] [PATCH 1/7] glsl: move gl_shader_stage_name() definition to shader_enums.h
Rob Clark
robdclark at gmail.com
Thu Oct 8 16:44:26 PDT 2015
On Thu, Oct 8, 2015 at 1:52 PM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
> On 8 October 2015 at 18:08, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>> On Thu, Oct 8, 2015 at 1:09 PM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
>>> This is a trivial enough function that can live in the header. While
>>> we're here, add a STATIC_ASSERT for good measure.
>>>
>>> Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
>>> ---
>>> src/glsl/shader_enums.c | 13 -------------
>>> src/glsl/shader_enums.h | 23 +++++++++++++++++++++--
>>> 2 files changed, 21 insertions(+), 15 deletions(-)
>>>
>>> diff --git a/src/glsl/shader_enums.c b/src/glsl/shader_enums.c
>>> index c196b79..b3da3e9 100644
>>> --- a/src/glsl/shader_enums.c
>>> +++ b/src/glsl/shader_enums.c
>>> @@ -32,19 +32,6 @@
>>> #define ENUM(x) [x] = #x
>>> #define NAME(val) ((((val) < ARRAY_SIZE(names)) && names[(val)]) ? names[(val)] : "UNKNOWN")
>>>
>>> -const char * gl_shader_stage_name(gl_shader_stage stage)
>>> -{
>>> - static const char *names[] = {
>>> - ENUM(MESA_SHADER_VERTEX),
>>> - ENUM(MESA_SHADER_TESS_CTRL),
>>> - ENUM(MESA_SHADER_TESS_EVAL),
>>> - ENUM(MESA_SHADER_GEOMETRY),
>>> - ENUM(MESA_SHADER_FRAGMENT),
>>> - ENUM(MESA_SHADER_COMPUTE),
>>> - };
>>> - return NAME(stage);
>>> -}
>>> -
>>> const char * gl_vert_attrib_name(gl_vert_attrib attrib)
>>> {
>>> static const char *names[] = {
>>> diff --git a/src/glsl/shader_enums.h b/src/glsl/shader_enums.h
>>> index 2a5d2c5..fbd2744 100644
>>> --- a/src/glsl/shader_enums.h
>>> +++ b/src/glsl/shader_enums.h
>>> @@ -43,10 +43,27 @@ typedef enum
>>> MESA_SHADER_COMPUTE = 5,
>>> } gl_shader_stage;
>>>
>>> -const char * gl_shader_stage_name(gl_shader_stage stage);
>>> -
>>> #define MESA_SHADER_STAGES (MESA_SHADER_COMPUTE + 1)
>>>
>>> +#define ENUM(x) [x] = #x
>>> +
>>> +static const char *gl_shader_stage_names[] = {
>>> + ENUM(MESA_SHADER_VERTEX),
>>> + ENUM(MESA_SHADER_TESS_CTRL),
>>> + ENUM(MESA_SHADER_TESS_EVAL),
>>> + ENUM(MESA_SHADER_GEOMETRY),
>>> + ENUM(MESA_SHADER_FRAGMENT),
>>> + ENUM(MESA_SHADER_COMPUTE),
>>> +};
>>
>> Won't this bloat the binary by including this in every object file? I
>> don't know that the array will get merged. (The strings will though.)
>> Normally these things live in c files so that they're stored in only
>> one object.
>>
> The linker (with its garbage collector) will sort it out for us. Seems
> like we do get a small increase from the series
>
> text data bss dec hex filename
> 5103374 204048 27648 5335070 51681e i965_dri.so.after
> 5104590 204208 27648 5336446 516d7e i965_dri.so.before
>
> Namely - we gain ~1.2k of text. Which imho doesn't sound that bad ?
fwiw, I wanted to mention that it going to be worse than that if you
build freedreno, since many of the shader_enum to string fxns will be
called in both nir_print and in freedreno.. and probably at some point
Eric might start wanting to use them for better error msgs in vc4, so
an arm megadriver build would end up w/ 3 copies of most of the fxns
and the string tables they reference. Likewise, I guess i965 would
get worse if it started using some of these fxns too. That is why I
mentioned earlier that this should be at most a temporary solution.
(But moving shader_enums into NIR turned out to be relatively easy so
I guess we can avoid the static-inline temporary soln now..)
BR,
-R
> Emil
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list