[PATCH vkd3d] vkd3d-shader: Allow a NULL buffer in vkd3d_string_buffer.
Zebediah Figura (she/her)
zfigura at codeweavers.com
Wed Oct 6 09:54:15 CDT 2021
On 10/6/21 07:48, Giovanni Mascellani wrote:
> Hi,
>
> Il 05/10/21 18:21, Zebediah Figura (she/her) ha scritto:
>> Well, in the sense that 216057 (well, 216055 really) is mainly just
>> there to get rid of the boilerplate around calling
>> hlsl_type_to_string(). This patch does lesson that boilerplate a bit.
>
> Mmh, I am not sure I understand why that would lessen the boilerplate.
> You still need to name and destroy the string buffer, each of which
> takes a line. And vkd3d_string_buffer_data(string) is definitely longer
> than string->buffer. I don't really think this helps here.
Well, it lessens the boilerplate if you no longer need to check for
success from hlsl_type_to_string().
>
>>>>> @@ -855,7 +856,7 @@ struct vkd3d_string_buffer
>>>>> *hlsl_type_to_string(struct hlsl_ctx *ctx, const stru
>>>>> if ((inner_string = hlsl_type_to_string(ctx, t)))
>>>>> {
>>>>> - vkd3d_string_buffer_printf(string, "%s",
>>>>> inner_string->buffer);
>>>>> + vkd3d_string_buffer_printf(string, "%s",
>>>>> vkd3d_string_buffer_data(inner_string));
>>>>> hlsl_release_string_buffer(ctx, inner_string);
>>>>> }
>>>>
>>>> This means that here, and everywhere else, you can get rid of the
>>>> NULL check.
>>>
>>> I'm pretty sure that in many cases vkd3d_string_buffer_data could be
>>> avoided, when it can be shown that the buffer cannot be NULL. Though
>>> ideally I'd like to encapsulate as much as possible the fact that the
>>> buffer can be NULL inside the accessor vkd3d_string_buffer_data, so I
>>> am using the accessor nearly everywhere (a couple of places were
>>> actually using knowledge of the internals of vkd3d_string_buffer, and
>>> I didn't change that, because after all we're writing C and nobody
>>> really expects full encapsulation).
>>
>> I guess you're looking at this with the perspective that it's just
>> there to avoid asserting the result of an allocation. That's fine, but
>> I think that it's useful to avoid checking the result of one as well.
>> Sort of like put_u32() and friends.
>
> Sorry, I don't think I'm following you.
I mean, it's very convenient to be able to not have to check for success
from an allocation, in some way or another, if you're going to be doing
that frequently. vkd3d_string_buffer_data() achieves that, so I think
it's useful to see that as an end goal of vkd3d_string_buffer_data() in
itself, and to take advantage of it to get rid of ubiquitous error checking.
More information about the wine-devel
mailing list