uint64_t va = tu_buffer_iova(buffer) + buffer_info->offset;
uint32_t range = get_range(buffer, buffer_info->offset, buffer_info->range);
/* newer a6xx allows using 16-bit descriptor for both 16-bit and 32-bit access */
- if (device->physical_device->gpu_id >= 650) {
+ if (device->physical_device->info->a6xx.storage_16bit) {
dst[0] = A6XX_IBO_0_TILE_MODE(TILE6_LINEAR) | A6XX_IBO_0_FMT(FMT6_16_UINT);
dst[1] = DIV_ROUND_UP(range, 2);
} else {
struct vk_device_extension_table *ext)
{
*ext = (struct vk_device_extension_table) {
- .KHR_16bit_storage = device->gpu_id >= 650,
+ .KHR_16bit_storage = device->info->a6xx.storage_16bit,
.KHR_bind_memory2 = true,
.KHR_create_renderpass2 = true,
.KHR_dedicated_allocation = true,
switch (ext->sType) {
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: {
VkPhysicalDeviceVulkan11Features *features = (void *) ext;
- features->storageBuffer16BitAccess = pdevice->gpu_id >= 650;
+ features->storageBuffer16BitAccess = pdevice->info->a6xx.storage_16bit;
features->uniformAndStorageBuffer16BitAccess = false;
features->storagePushConstant16 = false;
features->storageInputOutput16 = false;
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: {
VkPhysicalDevice16BitStorageFeatures *features =
(VkPhysicalDevice16BitStorageFeatures *) ext;
- features->storageBuffer16BitAccess = pdevice->gpu_id >= 650;
+ features->storageBuffer16BitAccess = pdevice->info->a6xx.storage_16bit;
features->uniformAndStorageBuffer16BitAccess = false;
features->storagePushConstant16 = false;
features->storageInputOutput16 = false;
.float_controls = true,
.float16 = true,
.int16 = true,
- .storage_16bit = dev->physical_device->gpu_id >= 650,
+ .storage_16bit = dev->physical_device->info->a6xx.storage_16bit,
.demote_to_helper_invocation = true,
.vk_memory_model = true,
.vk_memory_model_device_scope = true,