[PATCH vkd3d 3/5] include: Document struct vkd3d_shader_compile_info and members.

Zebediah Figura z.figura12 at gmail.com
Thu Aug 27 13:51:09 CDT 2020


On 8/27/20 11:17 AM, Henri Verbeet wrote:
> On Thu, 27 Aug 2020 at 07:46, Zebediah Figura <z.figura12 at gmail.com> wrote:
>> +/**
>> + * Determines how buffer UAVs are stored when compiling DXBC to SPIR-V.
> 
> This is slightly awkward; the actual shader in
> VKD3D_SHADER_SOURCE_DXBC_TPF is the "TPF" part, while "DXBC" is the
> container format, although people (including Microsoft) often use them
> interchangeably. Perhaps reword "how buffer UAVs are stored" to
> something along the lines of "the type of resource to use for buffer
> UAV bindings". Note that in the future this may apply to e.g. a GLSL
> target as well.

Right, I can drop the reference to source and target types.

> 
>>  enum vkd3d_shader_compile_option_buffer_uav
>>  {
>> -    /* Use buffer textures for buffer UAVs, this is the default. */
>> +    /** Use buffer textures for buffer UAVs. This is the default option. */
>>      VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV_STORAGE_TEXEL_BUFFER = 0x00000000,
> Should that be "the default value"?

Probably, yes.

> 
>>  enum vkd3d_shader_compile_option_name
>>  {
>> +    /**
>> +     * If \a value is nonzero, do not include debug information in the
>> +     * compiled shader. The default value is zero.
>> +     *
>> +     * This option is supported by vkd3d_compiler. However, not all compilers
>> +     * support generating debug information.
>> +     */
>>      VKD3D_SHADER_COMPILE_OPTION_STRIP_DEBUG = 0x00000001,
> I'm not sure I understand the vkd3d_compiler (vkd3d-compiler?)
> reference. 

That was an error for "vkd3d_shader_compile()".

> For what it's worth, in the context of SPIR-V, debug
> information is things like variable names (i.e., it gets you names
> like "%main" instead of "%1"), and source information. We don't
> currently use the latter, but we could embed the D3D assembly for the
> source shader, which would probably help a little with debugging
> SPIR-V shaders.

Do you think it's a good idea to go into exact detail on what kind of
debug information is included for each target, then? I kind of figured
that'd be out of scope for this documentation.

> 
>> +/**
>> + * Various settings which may affect shader compilation or scanning, passed as
>> + * part of struct vkd3d_shader_compile_info. For more details, see the
>> + * documentation for individual options.
>> + */
>>  struct vkd3d_shader_compile_option
>>  {
>> +    /** Name of the setting. */
>>      enum vkd3d_shader_compile_option_name name;
>> +    /**
>> +     * A value associated with the setting. The type and interpretation of the
>> +     * value depends on the setting in question.
>> +     */
>>      unsigned int value;
>>  };
> "Compile option"/"option" instead of "setting" above?

Yes, probably.

> 
>> +/** A generic structure containing GPU shader source or byte code. */
>>  struct vkd3d_shader_code
>>  {
>> +    /** Pointer to the byte code. */
>>      const void *code;
>> +    /** Size of \a code, in bytes. */
>>      size_t size;
>>  };
> We use this for the output as well, which may not necessarily be byte
> code. (E.g. GLSL or SPIR-V text.)

I tried to cover that with "source code or byte code". I guess maybe
it'd be better to just remove that phrase.

> 
>>  struct vkd3d_shader_compile_info
>>  {
>> +    /** Must be set to VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO. */
>>      enum vkd3d_shader_structure_type type;
>> +    /**
>> +     * Optional pointer to a structure containing further parameters. For a list
>> +     * of valid structures, refer to the respective function documentation. If
>> +     * no further parameters are needed, this field should be set to NULL.
>> +     */
>>      const void *next;
>>
>> +    /** Input source code or byte code. */
>>      struct vkd3d_shader_code source;
>>
>> +    /** Format of the input code passed in \ref source. */
>>      enum vkd3d_shader_source_type source_type;
>> +    /** Desired output format. */
>>      enum vkd3d_shader_target_type target_type;
>>
>> +    /**
>> +     * An array of compilation options. This field is ignored if
>> +     * \ref option_count is zero, but must be valid otherwise.
>> +     *
> A pointer to an array, strictly speaking, because C.
> 
>> +     * It is undefined behaviour to pass the same option multiple times.
>> +     *
> I'd be happy to provide a stronger guarantee than "undefined" here.
> E.g., "if the same option is specified multiple times, the last value
> is used".
> 
>> +     * Options not relevant to or not supported by a particular shader compiler
>> +     * or scanner will be ignored.
>> +     */
>>      const struct vkd3d_shader_compile_option *options;
>> +    /** Size, in elements, of \ref options. */
>>      unsigned int option_count;
>>
>> +    /** Minimum severity of messages returned from the shader function. */
>>      enum vkd3d_shader_log_level log_level;
>> +    /**
>> +     * Name of the initial source file, used only in error messages. This
>> +     * parameter is optional and may be NULL.
>> +     */
>>      const char *source_name;
>>  };
>>
> I think the HLSL preprocessor defines __FILE__.
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20200827/720fda77/attachment.sig>


More information about the wine-devel mailing list