[PATCH vkd3d 1/6] vkd3d-shader: Return a vkd3d_string_buffer from hlsl_type_to_string().

Zebediah Figura (she/her) zfigura at codeweavers.com
Fri Feb 26 12:13:19 CST 2021


On 2/26/21 12:08 PM, Matteo Bruni wrote:
> On Tue, Feb 23, 2021 at 10:57 PM Zebediah Figura
> <zfigura at codeweavers.com> wrote:
>>
>> Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
>> ---
>>  libs/vkd3d-shader/hlsl.c                 | 62 +++++++++++++-----------
>>  libs/vkd3d-shader/hlsl.h                 |  4 +-
>>  libs/vkd3d-shader/hlsl.y                 | 20 +++++---
>>  libs/vkd3d-shader/vkd3d_shader_main.c    | 54 +++++++++++++++++++++
>>  libs/vkd3d-shader/vkd3d_shader_private.h | 11 +++++
>>  5 files changed, 114 insertions(+), 37 deletions(-)
>>
>> diff --git a/libs/vkd3d-shader/hlsl.c b/libs/vkd3d-shader/hlsl.c
>> index 52b3dd10..78eacf28 100644
>> --- a/libs/vkd3d-shader/hlsl.c
>> +++ b/libs/vkd3d-shader/hlsl.c
> 
>>  const char *debug_hlsl_type(const struct hlsl_type *type)
>>  {
>> +    struct vkd3d_string_buffer_list string_buffers;
>> +    struct vkd3d_string_buffer *string;
>>      const char *ret;
>> -    char *string;
>>
>> -    if (!(string = hlsl_type_to_string(type)))
>> +    vkd3d_string_buffer_list_init(&string_buffers);
>> +    if (!(string = hlsl_type_to_string(&string_buffers, type)))
>>          return NULL;
>> -    ret = vkd3d_dbg_sprintf("%s", string);
>> -    vkd3d_free(string);
>> +    ret = vkd3d_dbg_sprintf("%s", string->buffer);
>> +    vkd3d_string_buffer_release(&string_buffers, string);
>> +    vkd3d_string_buffer_list_cleanup(&string_buffers);
>>      return ret;
>>  }
> 
> How painful would it be to pass the context (and thus string_buffers)
> through to this function?
> 

Not great—I do end up using it in more places—but not awful.

>> diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
>> index e837dbcd..2ef3d5da 100644
>> --- a/libs/vkd3d-shader/vkd3d_shader_private.h
>> +++ b/libs/vkd3d-shader/vkd3d_shader_private.h
>> @@ -865,17 +865,28 @@ bool shader_sm4_is_end(void *data, const DWORD **ptr) DECLSPEC_HIDDEN;
>>
>>  struct vkd3d_string_buffer
>>  {
>> +    struct list entry;
>>      char *buffer;
>>      unsigned int buffer_size;
>>      unsigned int content_size;
>>  };
>>
>> +struct vkd3d_string_buffer_list
>> +{
>> +    struct list list;
>> +};
> 
> Since this is the second time we implement it and hindsight is usually
> very good, I'd prefer it if we used an array + vkd3d_array_reserve()
> to store the stack of available vkd3d_string_buffer structs.

Sure, will do.

> Also it would be nice to rename struct vkd3d_string_buffer_list to
> something that explains its function rather than what it is, but as
> usual I don't have any good suggestions...
> 

I'm not sure what's a more functionally descriptive name, other than
maybe vkd3d_string_buffer_cache?

-------------- 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/20210226/ee97abf0/attachment.sig>


More information about the wine-devel mailing list