@@ -261,6 +261,21 @@ private static void throwForMissingRequirements(final VkPhysicalDevice vkPhysica
261261 throw new BackendCreationException ("Device missing capabilities" , mostProminentReason , missingCapabilities );
262262 }
263263
264+ private static void enableExtensionFeatures (MemoryStack stack , VkPhysicalDeviceFeatures2 features , Collection <String > deviceExtensions ){
265+ if (deviceExtensions .contains ("VK_EXT_vertex_attribute_divisor" )){
266+ VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT vaf = VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT .calloc (stack ).sType$Default ();
267+ vaf .vertexAttributeInstanceRateDivisor (true );
268+ features .pNext (vaf );
269+ }
270+ // This was promoted to core only in 1.1, but we are planning on targeting 1.0
271+ // Though not all 1.0 devices have this extension, so we need to think about it a bit more...
272+ if (deviceExtensions .contains ("VK_KHR_shader_draw_parameters" )){
273+ VkPhysicalDeviceShaderDrawParametersFeatures sdp = VkPhysicalDeviceShaderDrawParametersFeatures .calloc (stack ).sType$Default ();
274+ sdp .shaderDrawParameters (true );
275+ features .pNext (sdp );
276+ }
277+ }
278+
264279 private static VkDevice createVkDevice (
265280 final Collection <String > deviceExtensions , final Vk11PhysicalDevice physicalDevice
266281 ) throws BackendCreationException {
@@ -273,15 +288,7 @@ private static VkDevice createVkDevice(
273288 deviceFeatures .features ().fillModeNonSolid (availableFeatures .features ().fillModeNonSolid ());
274289 deviceFeatures .features ().samplerAnisotropy (availableFeatures .features ().samplerAnisotropy ());
275290
276- // Enable VK10 shaderDrawParameters via pNext chain
277- VkPhysicalDeviceVulkan11Features vk11Features = VkPhysicalDeviceVulkan11Features .calloc (stack ).sType$Default ();
278- vk11Features .shaderDrawParameters (true );
279- deviceFeatures .pNext (vk11Features .address ());
280-
281- // Enable VK10 vertexAttributeDivisor via pNext chain (EXT extension)
282- VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT vertexDivisorFeatures = VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT .calloc (stack ).sType$Default ();
283- vertexDivisorFeatures .vertexAttributeInstanceRateDivisor (true );
284- vk11Features .pNext (vertexDivisorFeatures .address ());
291+ enableExtensionFeatures (stack , deviceFeatures , deviceExtensions );
285292
286293 Int2IntMap queuesToCreate = physicalDevice .queueFamilyCreateInfoMap ();
287294 Buffer queueCreationInfo = VkDeviceQueueCreateInfo .calloc (queuesToCreate .size (), stack );
0 commit comments