Skip to content

Commit 4253e37

Browse files
committed
Enable feature only if corresponding extension is present
1 parent 6296789 commit 4253e37

1 file changed

Lines changed: 16 additions & 9 deletions

File tree

src/main/java/git/artdeell/artvk/Vk11Backend.java

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)