[PATCH vkd3d v3] vkd3d-shader/hlsl: Explicitly specify the swizzle type for sm4 source registers.
Matteo Bruni
matteo.mystral at gmail.com
Wed Nov 17 03:29:51 CST 2021
On Mon, Nov 15, 2021 at 7:40 PM Francisco Casas <fcasas at codeweavers.com> wrote:
>
> Some register types do not use a consistent swizzle type, so the
> sm4_swizzle_type() function is removed.
>
> The swizzle type now must be specified using the swizzle_type field.
>
> Signed-off-by: Francisco Casas <fcasas at codeweavers.com>
> ---
> libs/vkd3d-shader/hlsl.h | 2 +-
> libs/vkd3d-shader/hlsl_codegen.c | 2 +-
> libs/vkd3d-shader/hlsl_sm4.c | 96 ++++++++++++++++----------------
> 3 files changed, 50 insertions(+), 50 deletions(-)
> diff --git a/libs/vkd3d-shader/hlsl_sm4.c b/libs/vkd3d-shader/hlsl_sm4.c
> index e597425a..e857a681 100644
> --- a/libs/vkd3d-shader/hlsl_sm4.c
> +++ b/libs/vkd3d-shader/hlsl_sm4.c
> @@ -26,7 +26,7 @@
> static void write_sm4_block(struct hlsl_ctx *ctx, struct vkd3d_bytecode_buffer *buffer, const struct hlsl_block *block);
>
> bool hlsl_sm4_register_from_semantic(struct hlsl_ctx *ctx, const struct hlsl_semantic *semantic,
> - bool output, enum vkd3d_sm4_register_type *type, bool *has_idx)
> + bool output, enum vkd3d_sm4_register_type *type, enum vkd3d_sm4_swizzle_type *swizzle_type, bool *has_idx)
> {
> unsigned int i;
>
> @@ -36,19 +36,20 @@ bool hlsl_sm4_register_from_semantic(struct hlsl_ctx *ctx, const struct hlsl_sem
> bool output;
> enum vkd3d_shader_type shader_type;
> enum vkd3d_sm4_register_type type;
> + enum vkd3d_sm4_swizzle_type swizzle_type;
> bool has_idx;
> }
> register_table[] =
> {
> - {"sv_primitiveid", false, VKD3D_SHADER_TYPE_GEOMETRY, VKD3D_SM4_RT_PRIMID, false},
> + {"sv_primitiveid", false, VKD3D_SHADER_TYPE_GEOMETRY, VKD3D_SM4_RT_PRIMID, VKD3D_SM4_SWIZZLE_NONE, false},
>
> /* Put sv_target in this table, instead of letting it fall through to
> * default varying allocation, so that the register index matches the
> * usage index. */
> - {"color", true, VKD3D_SHADER_TYPE_PIXEL, VKD3D_SM4_RT_OUTPUT, true},
> - {"depth", true, VKD3D_SHADER_TYPE_PIXEL, VKD3D_SM4_RT_DEPTHOUT, false},
> - {"sv_depth", true, VKD3D_SHADER_TYPE_PIXEL, VKD3D_SM4_RT_DEPTHOUT, false},
> - {"sv_target", true, VKD3D_SHADER_TYPE_PIXEL, VKD3D_SM4_RT_OUTPUT, true},
> + {"color", true, VKD3D_SHADER_TYPE_PIXEL, VKD3D_SM4_RT_OUTPUT, VKD3D_SM4_SWIZZLE_VEC4, true},
> + {"depth", true, VKD3D_SHADER_TYPE_PIXEL, VKD3D_SM4_RT_DEPTHOUT, VKD3D_SM4_SWIZZLE_VEC4, false},
> + {"sv_depth", true, VKD3D_SHADER_TYPE_PIXEL, VKD3D_SM4_RT_DEPTHOUT, VKD3D_SM4_SWIZZLE_VEC4, false},
> + {"sv_target", true, VKD3D_SHADER_TYPE_PIXEL, VKD3D_SM4_RT_OUTPUT, VKD3D_SM4_SWIZZLE_VEC4, true},
> };
Is VEC4 right for depth / sv_depth?
I see that below in some, but not all, places we're manually replacing
the swizzle type for depthout with VKD3D_SM4_DIMENSION_SCALAR. It
seems like a good idea to directly report the correct swizzle type
here instead.
Unless I'm missing something.
More information about the wine-devel
mailing list