aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/amd/vulkan/radv_device.c34
-rw-r--r--src/amd/vulkan/radv_extensions.py7
-rw-r--r--src/amd/vulkan/radv_shader.c10
3 files changed, 29 insertions, 22 deletions
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index bed7062ec1d..75c72f5eb15 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -957,7 +957,7 @@ void radv_GetPhysicalDeviceFeatures(
.shaderCullDistance = true,
.shaderFloat64 = true,
.shaderInt64 = true,
- .shaderInt16 = pdevice->rad_info.chip_class >= GFX9 && !pdevice->use_aco,
+ .shaderInt16 = pdevice->rad_info.chip_class >= GFX9,
.sparseBinding = true,
.variableMultisampleRate = true,
.inheritedQueries = true,
@@ -999,9 +999,10 @@ void radv_GetPhysicalDeviceFeatures2(
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: {
VkPhysicalDevice16BitStorageFeatures *features =
(VkPhysicalDevice16BitStorageFeatures*)ext;
- features->storageBuffer16BitAccess = !pdevice->use_aco;
- features->uniformAndStorageBuffer16BitAccess = !pdevice->use_aco;
- features->storagePushConstant16 = !pdevice->use_aco;
+ bool enable = !pdevice->use_aco || pdevice->rad_info.chip_class >= GFX8;
+ features->storageBuffer16BitAccess = enable;
+ features->uniformAndStorageBuffer16BitAccess = enable;
+ features->storagePushConstant16 = enable;
features->storageInputOutput16 = pdevice->rad_info.has_double_rate_fp16 && !pdevice->use_aco && LLVM_VERSION_MAJOR >= 9;
break;
}
@@ -1100,16 +1101,17 @@ void radv_GetPhysicalDeviceFeatures2(
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: {
VkPhysicalDevice8BitStorageFeatures *features =
(VkPhysicalDevice8BitStorageFeatures *)ext;
- features->storageBuffer8BitAccess = !pdevice->use_aco;
- features->uniformAndStorageBuffer8BitAccess = !pdevice->use_aco;
- features->storagePushConstant8 = !pdevice->use_aco;
+ bool enable = !pdevice->use_aco || pdevice->rad_info.chip_class >= GFX8;
+ features->storageBuffer8BitAccess = enable;
+ features->uniformAndStorageBuffer8BitAccess = enable;
+ features->storagePushConstant8 = enable;
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES: {
VkPhysicalDeviceShaderFloat16Int8Features *features =
(VkPhysicalDeviceShaderFloat16Int8Features*)ext;
features->shaderFloat16 = pdevice->rad_info.has_double_rate_fp16 && !pdevice->use_aco;
- features->shaderInt8 = !pdevice->use_aco;
+ features->shaderInt8 = !pdevice->use_aco || pdevice->rad_info.chip_class >= GFX8;
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES: {
@@ -1217,9 +1219,10 @@ void radv_GetPhysicalDeviceFeatures2(
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: {
VkPhysicalDeviceVulkan11Features *features =
(VkPhysicalDeviceVulkan11Features *)ext;
- features->storageBuffer16BitAccess = !pdevice->use_aco;
- features->uniformAndStorageBuffer16BitAccess = !pdevice->use_aco;
- features->storagePushConstant16 = !pdevice->use_aco;
+ bool storage16_enable = !pdevice->use_aco || pdevice->rad_info.chip_class >= GFX8;
+ features->storageBuffer16BitAccess = storage16_enable;
+ features->uniformAndStorageBuffer16BitAccess = storage16_enable;
+ features->storagePushConstant16 = storage16_enable;
features->storageInputOutput16 = pdevice->rad_info.has_double_rate_fp16 && !pdevice->use_aco && LLVM_VERSION_MAJOR >= 9;
features->multiview = true;
features->multiviewGeometryShader = true;
@@ -1234,15 +1237,16 @@ void radv_GetPhysicalDeviceFeatures2(
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: {
VkPhysicalDeviceVulkan12Features *features =
(VkPhysicalDeviceVulkan12Features *)ext;
+ bool int8_enable = !pdevice->use_aco || pdevice->rad_info.chip_class >= GFX8;
features->samplerMirrorClampToEdge = true;
features->drawIndirectCount = true;
- features->storageBuffer8BitAccess = !pdevice->use_aco;
- features->uniformAndStorageBuffer8BitAccess = !pdevice->use_aco;
- features->storagePushConstant8 = !pdevice->use_aco;
+ features->storageBuffer8BitAccess = int8_enable;
+ features->uniformAndStorageBuffer8BitAccess = int8_enable;
+ features->storagePushConstant8 = int8_enable;
features->shaderBufferInt64Atomics = LLVM_VERSION_MAJOR >= 9;
features->shaderSharedInt64Atomics = LLVM_VERSION_MAJOR >= 9;
features->shaderFloat16 = pdevice->rad_info.has_double_rate_fp16 && !pdevice->use_aco;
- features->shaderInt8 = !pdevice->use_aco;
+ features->shaderInt8 = int8_enable;
features->descriptorIndexing = true;
features->shaderInputAttachmentArrayDynamicIndexing = true;
features->shaderUniformTexelBufferArrayDynamicIndexing = true;
diff --git a/src/amd/vulkan/radv_extensions.py b/src/amd/vulkan/radv_extensions.py
index 23a6bb6702f..ea789bbded7 100644
--- a/src/amd/vulkan/radv_extensions.py
+++ b/src/amd/vulkan/radv_extensions.py
@@ -52,7 +52,7 @@ class Extension:
EXTENSIONS = [
Extension('VK_ANDROID_external_memory_android_hardware_buffer', 3, 'RADV_SUPPORT_ANDROID_HARDWARE_BUFFER && device->rad_info.has_syncobj_wait_for_submit'),
Extension('VK_ANDROID_native_buffer', 5, 'ANDROID && device->rad_info.has_syncobj_wait_for_submit'),
- Extension('VK_KHR_16bit_storage', 1, '!device->use_aco'),
+ Extension('VK_KHR_16bit_storage', 1, '!device->use_aco || device->rad_info.chip_class >= GFX8'),
Extension('VK_KHR_bind_memory2', 1, True),
Extension('VK_KHR_buffer_device_address', 1, True),
Extension('VK_KHR_create_renderpass2', 1, True),
@@ -92,7 +92,7 @@ EXTENSIONS = [
Extension('VK_KHR_shader_clock', 1, True),
Extension('VK_KHR_shader_draw_parameters', 1, True),
Extension('VK_KHR_shader_float_controls', 1, True),
- Extension('VK_KHR_shader_float16_int8', 1, '!device->use_aco'),
+ Extension('VK_KHR_shader_float16_int8', 1, '!device->use_aco || device->rad_info.chip_class >= GFX8'),
Extension('VK_KHR_shader_non_semantic_info', 1, True),
Extension('VK_KHR_shader_subgroup_extended_types', 1, '!device->use_aco'),
Extension('VK_KHR_spirv_1_4', 1, True),
@@ -109,7 +109,7 @@ EXTENSIONS = [
Extension('VK_KHR_xlib_surface', 6, 'VK_USE_PLATFORM_XLIB_KHR'),
Extension('VK_KHR_multiview', 1, True),
Extension('VK_KHR_display', 23, 'VK_USE_PLATFORM_DISPLAY_KHR'),
- Extension('VK_KHR_8bit_storage', 1, '!device->use_aco'),
+ Extension('VK_KHR_8bit_storage', 1, '!device->use_aco || device->rad_info.chip_class >= GFX8'),
Extension('VK_EXT_direct_mode_display', 1, 'VK_USE_PLATFORM_DISPLAY_KHR'),
Extension('VK_EXT_acquire_xlib_display', 1, 'VK_USE_PLATFORM_XLIB_XRANDR_EXT'),
Extension('VK_EXT_buffer_device_address', 1, True),
@@ -258,6 +258,7 @@ def _init_exts_from_xml(xml):
for ext in EXTENSIONS:
if ext.type == 'device':
+ ext.enable = '(' + ext.enable + ')'
for dep in extra_deps(ext):
ext.enable += ' && ' + dep
diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index 42a664f7f36..36a7b5f5511 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -346,6 +346,8 @@ radv_shader_compile_to_nir(struct radv_device *device,
}
}
}
+ bool int8_int16_enable = !device->physical_device->use_aco ||
+ device->physical_device->rad_info.chip_class >= GFX8;
const struct spirv_to_nir_options spirv_options = {
.lower_ubo_ssbo_access_to_offsets = true,
.caps = {
@@ -369,8 +371,8 @@ radv_shader_compile_to_nir(struct radv_device *device,
.image_ms_array = true,
.image_read_without_format = true,
.image_write_without_format = true,
- .int8 = !device->physical_device->use_aco,
- .int16 = !device->physical_device->use_aco,
+ .int8 = int8_int16_enable,
+ .int16 = int8_int16_enable,
.int64 = true,
.int64_atomics = true,
.multiview = true,
@@ -380,8 +382,8 @@ radv_shader_compile_to_nir(struct radv_device *device,
.shader_clock = true,
.shader_viewport_index_layer = true,
.stencil_export = true,
- .storage_8bit = !device->physical_device->use_aco,
- .storage_16bit = !device->physical_device->use_aco,
+ .storage_8bit = int8_int16_enable,
+ .storage_16bit = int8_int16_enable,
.storage_image_ms = true,
.subgroup_arithmetic = true,
.subgroup_ballot = true,