[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