[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