radv: enable shaderInt16 unconditionally with LLVM and only GFX8+ with ACO
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 4 May 2020 10:01:41 +0000 (12:01 +0200)
committerMarge Bot <eric+marge@anholt.net>
Tue, 5 May 2020 10:04:36 +0000 (10:04 +0000)
The Vulkan spec says:

"shaderInt16 specifies whether 16-bit integers (signed and unsigned)
are supported in shader code. If this feature is not enabled, 16-bit
integer types must not be used in shader code."

I think it's just safe to enable it because 16-bit integers should
be fully supported with LLVM and also with ACO and GFX8+. On GFX8
and earlier generations, throughput of 16-bit int is same as 32-bit
but that should't change anything.

For GFX6-GFX7 ACO support, we have to implement conversions without
SDWA.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4874>

src/amd/vulkan/radv_device.c

index 49cbee18effdea0ece7987bb3fe281f59c531e44..9810820b252dd75907095ab6e0a362dc478d1610 100644 (file)
@@ -908,7 +908,7 @@ void radv_GetPhysicalDeviceFeatures(
                .shaderCullDistance                       = true,
                .shaderFloat64                            = true,
                .shaderInt64                              = true,
-               .shaderInt16                              = pdevice->rad_info.chip_class >= GFX9,
+               .shaderInt16                              = !pdevice->use_aco || pdevice->rad_info.chip_class >= GFX8,
                .sparseBinding                            = true,
                .variableMultisampleRate                  = true,
                .inheritedQueries                         = true,