[PATCH vkd3d 2/6] vkd3d-shader: Get rid of hlsl_base_type_to_string().

Zebediah Figura (she/her) zfigura at codeweavers.com
Sat Feb 20 10:01:22 CST 2021


On 2/18/21 5:48 PM, Matteo Bruni wrote:
> On Wed, Feb 17, 2021 at 6:52 AM Zebediah Figura <zfigura at codeweavers.com> wrote:
>>
>> Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
>> ---
>>  libs/vkd3d-shader/hlsl.c | 47 ++++++++++++----------------------------
>>  libs/vkd3d-shader/hlsl.h |  1 -
>>  libs/vkd3d-shader/hlsl.y |  3 ++-
>>  3 files changed, 16 insertions(+), 35 deletions(-)
>>
>> diff --git a/libs/vkd3d-shader/hlsl.c b/libs/vkd3d-shader/hlsl.c
>> index 342fe6af..9e1eb7ee 100644
>> --- a/libs/vkd3d-shader/hlsl.c
>> +++ b/libs/vkd3d-shader/hlsl.c
>> @@ -639,55 +639,37 @@ static int compare_function_decl_rb(const void *key, const struct rb_entry *entr
>>      return 0;
>>  }
>>
>> -const char *hlsl_base_type_to_string(const struct hlsl_type *type)
>> -{
>> -    const char *name = "(unknown)";
>> -
>> -    switch (type->base_type)
>> -    {
>> -        case HLSL_TYPE_FLOAT:        name = "float";         break;
>> -        case HLSL_TYPE_HALF:         name = "half";          break;
>> -        case HLSL_TYPE_DOUBLE:       name = "double";        break;
>> -        case HLSL_TYPE_INT:          name = "int";           break;
>> -        case HLSL_TYPE_UINT:         name = "uint";          break;
>> -        case HLSL_TYPE_BOOL:         name = "bool";          break;
>> -        case HLSL_TYPE_SAMPLER:
>> -            switch (type->sampler_dim)
>> -            {
>> -                case HLSL_SAMPLER_DIM_GENERIC: name = "sampler";       break;
>> -                case HLSL_SAMPLER_DIM_1D:      name = "sampler1D";     break;
>> -                case HLSL_SAMPLER_DIM_2D:      name = "sampler2D";     break;
>> -                case HLSL_SAMPLER_DIM_3D:      name = "sampler3D";     break;
>> -                case HLSL_SAMPLER_DIM_CUBE:    name = "samplerCUBE";   break;
>> -            }
>> -            break;
>> -        default:
>> -            FIXME("Unhandled case %u.\n", type->base_type);
>> -    }
>> -    return name;
>> -}
>> -
>>  char *hlsl_type_to_string(const struct hlsl_type *type)
>>  {
>>      const char *name;
>>      char *string;
>>
>> +    static const char base_types[HLSL_TYPE_LAST_SCALAR + 1][7] =
>> +    {
>> +        "float",
>> +        "half",
>> +        "double",
>> +        "int",
>> +        "uint",
>> +        "bool",
>> +    };
>> +
>>      if (type->name)
>>          return vkd3d_strdup(type->name);
> 
> Maybe it's overkill but I wouldn't mind an assert(type->base_type <
> ARRAY_SIZE(base_types)) here.

Sure, will add.

> 
>> diff --git a/libs/vkd3d-shader/hlsl.h b/libs/vkd3d-shader/hlsl.h
>> index b2b7daf0..56b8e2a8 100644
>> --- a/libs/vkd3d-shader/hlsl.h
>> +++ b/libs/vkd3d-shader/hlsl.h
>> @@ -496,7 +496,6 @@ static inline void hlsl_src_remove(struct hlsl_src *src)
>>
>>  const char *debug_hlsl_type(const struct hlsl_type *type) DECLSPEC_HIDDEN;
>>
>> -const char *hlsl_base_type_to_string(const struct hlsl_type *type) DECLSPEC_HIDDEN;
>>  char *hlsl_type_to_string(const struct hlsl_type *type) DECLSPEC_HIDDEN;
>>  char *hlsl_modifiers_to_string(unsigned int modifiers) DECLSPEC_HIDDEN;
>>  const char *hlsl_node_type_to_string(enum hlsl_ir_node_type type) DECLSPEC_HIDDEN;
>> diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y
>> index 8b91ff5d..a3d4b4ed 100644
>> --- a/libs/vkd3d-shader/hlsl.y
>> +++ b/libs/vkd3d-shader/hlsl.y
>> @@ -909,13 +909,14 @@ static unsigned int evaluate_array_dimension(struct hlsl_ir_node *node)
>>                  case HLSL_TYPE_INT:
>>                      return constant->value.i[0];
>>                  case HLSL_TYPE_FLOAT:
>> +                case HLSL_TYPE_HALF:
>>                      return constant->value.f[0];
>>                  case HLSL_TYPE_DOUBLE:
>>                      return constant->value.d[0];
>>                  case HLSL_TYPE_BOOL:
>>                      return constant->value.b[0];
>>                  default:
>> -                    WARN("Invalid type %s.\n", hlsl_base_type_to_string(constant->node.data_type));
>> +                    assert(0);
>>                      return 0;
>>              }
>>          }
> 
> The addition of the HLSL_TYPE_HALF case here is a bit sneaky.
> 

True; I'll be more explicit about that in the future.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 495 bytes
Desc: OpenPGP digital signature
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20210220/f1035948/attachment-0001.sig>


More information about the wine-devel mailing list