features->nullDescriptor = true;
                        break;
                }
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT: {
+                       VkPhysicalDevicePrivateDataFeaturesEXT *features =
+                               (VkPhysicalDevicePrivateDataFeaturesEXT *)ext;
+                       features->privateData = true;
+                       break;
+               }
                default:
                        break;
                }
                pMultisampleProperties->maxSampleLocationGridSize = (VkExtent2D){ 0, 0 };
        }
 }
+
+VkResult radv_CreatePrivateDataSlotEXT(
+    VkDevice                                    _device,
+    const VkPrivateDataSlotCreateInfoEXT*       pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkPrivateDataSlotEXT*                       pPrivateDataSlot)
+{
+       RADV_FROM_HANDLE(radv_device, device, _device);
+       return vk_private_data_slot_create(&device->vk, pCreateInfo, pAllocator,
+                                          pPrivateDataSlot);
+}
+
+void radv_DestroyPrivateDataSlotEXT(
+    VkDevice                                    _device,
+    VkPrivateDataSlotEXT                        privateDataSlot,
+    const VkAllocationCallbacks*                pAllocator)
+{
+       RADV_FROM_HANDLE(radv_device, device, _device);
+       vk_private_data_slot_destroy(&device->vk, privateDataSlot, pAllocator);
+}
+
+VkResult radv_SetPrivateDataEXT(
+    VkDevice                                    _device,
+    VkObjectType                                objectType,
+    uint64_t                                    objectHandle,
+    VkPrivateDataSlotEXT                        privateDataSlot,
+    uint64_t                                    data)
+{
+       RADV_FROM_HANDLE(radv_device, device, _device);
+       return vk_object_base_set_private_data(&device->vk, objectType,
+                                              objectHandle, privateDataSlot,
+                                              data);
+}
+
+void radv_GetPrivateDataEXT(
+    VkDevice                                    _device,
+    VkObjectType                                objectType,
+    uint64_t                                    objectHandle,
+    VkPrivateDataSlotEXT                        privateDataSlot,
+    uint64_t*                                   pData)
+{
+       RADV_FROM_HANDLE(radv_device, device, _device);
+       vk_object_base_get_private_data(&device->vk, objectType, objectHandle,
+                                       privateDataSlot, pData);
+}
 
     Extension('VK_EXT_pci_bus_info',                      2, True),
     Extension('VK_EXT_pipeline_creation_feedback',        1, True),
     Extension('VK_EXT_post_depth_coverage',               1, 'device->rad_info.chip_class >= GFX10'),
+    Extension('VK_EXT_private_data',                      1, True),
     Extension('VK_EXT_queue_family_foreign',              1, True),
     Extension('VK_EXT_robustness2',                       1, True),
     # Disable sample locations on GFX10 until the CTS failures have been resolved.