@@ -322,20 +322,34 @@ class VKDevice : public offloadtest::Device {
322322 VKDevice (const VKDevice &) = default ;
323323
324324 ~VKDevice () override = default ;
325-
326325 llvm::StringRef getAPIName () const override { return " Vulkan" ; }
327326 GPUAPI getAPI () const override { return GPUAPI::Vulkan; }
328- uint32_t getSubgroupSize () override {
327+ uint32_t getSubgroupSize () const override {
329328 VkPhysicalDeviceSubgroupProperties SubgroupProps = {};
330329 SubgroupProps.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES;
331330
332- VkPhysicalDeviceProperties2 subgroupProperties2 = {};
333- subgroupProperties2 .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
334- subgroupProperties2 .pNext = &SubgroupProps;
335- vkGetPhysicalDeviceProperties2 (Device, &subgroupProperties2 );
331+ VkPhysicalDeviceProperties2 SubgroupProperties2 = {};
332+ SubgroupProperties2 .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
333+ SubgroupProperties2 .pNext = &SubgroupProps;
334+ vkGetPhysicalDeviceProperties2 (Device, &SubgroupProperties2 );
336335 return SubgroupProps.subgroupSize ;
337336 }
338337
338+ std::pair<uint32_t , uint32_t > getMinMaxSubgroupSize () const override {
339+ VkPhysicalDeviceSubgroupSizeControlPropertiesEXT SubgroupSizeControlProps =
340+ {};
341+ SubgroupSizeControlProps.sType =
342+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT;
343+
344+ VkPhysicalDeviceProperties2 Props2 = {};
345+ Props2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
346+ Props2.pNext = &SubgroupSizeControlProps;
347+
348+ vkGetPhysicalDeviceProperties2 (Device, &Props2);
349+ return {SubgroupSizeControlProps.minSubgroupSize ,
350+ SubgroupSizeControlProps.maxSubgroupSize };
351+ }
352+
339353 const Capabilities &getCapabilities () override {
340354 if (Caps.empty ())
341355 queryCapabilities ();
@@ -372,6 +386,10 @@ class VKDevice : public offloadtest::Device {
372386
373387 void printExtra (llvm::raw_ostream &OS) override {
374388 OS << " SubgroupSize: " << getSubgroupSize () << " \n " ;
389+ auto MinMax = getMinMaxSubgroupSize ();
390+ OS << " MinSubgroupSize: " << MinMax.first << " \n " ;
391+ OS << " MaxSubgroupSize: " << MinMax.second << " \n " ;
392+
375393 OS << " Layers:\n " ;
376394 for (auto Layer : getLayers ()) {
377395 uint64_t Sz = strnlen (Layer.layerName , VK_MAX_EXTENSION_NAME_SIZE);
0 commit comments