[Mesa-dev] [PATCH 10/24] st/mesa: optimize sampler state translation code

Marek Olšák maraeo at gmail.com
Wed Jun 14 17:28:19 UTC 2017


On Wed, Jun 14, 2017 at 9:15 AM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> On 12.06.2017 20:18, Marek Olšák wrote:
>>
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> ---
>>   src/mesa/state_tracker/st_atom_sampler.c | 79
>> +++++++++++++-------------------
>>   1 file changed, 31 insertions(+), 48 deletions(-)
>>
>> diff --git a/src/mesa/state_tracker/st_atom_sampler.c
>> b/src/mesa/state_tracker/st_atom_sampler.c
>> index 9695069..ea231f3 100644
>> --- a/src/mesa/state_tracker/st_atom_sampler.c
>> +++ b/src/mesa/state_tracker/st_atom_sampler.c
>> @@ -51,85 +51,68 @@
>>     #include "util/u_format.h"
>>       /**
>>    * Convert GLenum texcoord wrap tokens to pipe tokens.
>>    */
>>   static GLuint
>>   gl_wrap_xlate(GLenum wrap)
>>   {
>> -   switch (wrap) {
>> -   case GL_REPEAT:
>> -      return PIPE_TEX_WRAP_REPEAT;
>> -   case GL_CLAMP:
>> -      return PIPE_TEX_WRAP_CLAMP;
>> -   case GL_CLAMP_TO_EDGE:
>> -      return PIPE_TEX_WRAP_CLAMP_TO_EDGE;
>> -   case GL_CLAMP_TO_BORDER:
>> -      return PIPE_TEX_WRAP_CLAMP_TO_BORDER;
>> -   case GL_MIRRORED_REPEAT:
>> -      return PIPE_TEX_WRAP_MIRROR_REPEAT;
>> -   case GL_MIRROR_CLAMP_EXT:
>> -      return PIPE_TEX_WRAP_MIRROR_CLAMP;
>> -   case GL_MIRROR_CLAMP_TO_EDGE_EXT:
>> -      return PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE;
>> -   case GL_MIRROR_CLAMP_TO_BORDER_EXT:
>> -      return PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER;
>> -   default:
>> -      assert(0);
>> -      return 0;
>> -   }
>> +   /* Take advantage of how the enums are defined. */
>> +   static const unsigned table[32] = {
>> +      PIPE_TEX_WRAP_CLAMP,
>> +      PIPE_TEX_WRAP_REPEAT,
>> +      PIPE_TEX_WRAP_MIRROR_CLAMP,
>> +      PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE,
>> +      0,
>> +      0,
>> +      0,
>> +      0,
>> +      0,
>> +      0,
>> +      0,
>> +      0,
>> +      0,
>> +      PIPE_TEX_WRAP_CLAMP_TO_BORDER,
>> +      0,
>> +      PIPE_TEX_WRAP_CLAMP_TO_EDGE,
>> +      PIPE_TEX_WRAP_MIRROR_REPEAT,
>> +      0,
>> +      PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER,
>
>
> Please use designated initializers, like
>
>  [GL_REPEAT & 0x1f] = PIPE_TEX_WRAP_CLAMP
>
> etc.

Do designated initializers work with MSVC?

Marek

>
> With this and Timothy's comment on patch 9 fixed, patches 1-10 are
>
> Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
>
>
>> +   };
>> +
>> +   return table[wrap & 0x1f];
>>   }
>>       static GLuint
>>   gl_filter_to_mip_filter(GLenum filter)
>>   {
>> -   switch (filter) {
>> -   case GL_NEAREST:
>> -   case GL_LINEAR:
>> +   /* Take advantage of how the enums are defined. */
>> +   if (filter <= GL_LINEAR)
>>         return PIPE_TEX_MIPFILTER_NONE;
>> -
>> -   case GL_NEAREST_MIPMAP_NEAREST:
>> -   case GL_LINEAR_MIPMAP_NEAREST:
>> +   if (filter <= GL_LINEAR_MIPMAP_NEAREST)
>>         return PIPE_TEX_MIPFILTER_NEAREST;
>>   -   case GL_NEAREST_MIPMAP_LINEAR:
>> -   case GL_LINEAR_MIPMAP_LINEAR:
>> -      return PIPE_TEX_MIPFILTER_LINEAR;
>> -
>> -   default:
>> -      assert(0);
>> -      return PIPE_TEX_MIPFILTER_NONE;
>> -   }
>> +   return PIPE_TEX_MIPFILTER_LINEAR;
>>   }
>>       static GLuint
>>   gl_filter_to_img_filter(GLenum filter)
>>   {
>> -   switch (filter) {
>> -   case GL_NEAREST:
>> -   case GL_NEAREST_MIPMAP_NEAREST:
>> -   case GL_NEAREST_MIPMAP_LINEAR:
>> -      return PIPE_TEX_FILTER_NEAREST;
>> -
>> -   case GL_LINEAR:
>> -   case GL_LINEAR_MIPMAP_NEAREST:
>> -   case GL_LINEAR_MIPMAP_LINEAR:
>> +   /* Take advantage of how the enums are defined. */
>> +   if (filter & 1)
>>         return PIPE_TEX_FILTER_LINEAR;
>>   -   default:
>> -      assert(0);
>> -      return PIPE_TEX_FILTER_NEAREST;
>> -   }
>> +   return PIPE_TEX_FILTER_NEAREST;
>>   }
>>       /**
>>    * Convert a gl_sampler_object to a pipe_sampler_state object.
>>    */
>>   void
>>   st_convert_sampler(const struct st_context *st,
>>                      const struct gl_texture_object *texobj,
>>                      const struct gl_sampler_object *msamp,
>>
>
>
> --
> Lerne, wie die Welt wirklich ist,
> Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list