CMAKE_DEPENDENT_OPTION(VKVG_LCD_FONT_FILTER "enable freetype lcd font filtering" OFF "VKVG_USE_FONTCONFIG" OFF)
+# todo if cmake vers >= 3.23: make dependent option on Vulkan_VERSION >= 1_2:
+OPTION(VKVG_VK_SCALAR_BLOCK_SUPPORTED "Force scalar block layout support if vulkan version < 1_2" OFF)
+IF (VKVG_VK_SCALAR_BLOCK_SUPPORTED)
+ ADD_DEFINITIONS (-DVKVG_VK_SCALAR_BLOCK_SUPPORTED)
+ENDIF ()
+
+
IF (ENABLE_DBG_UTILS)
ADD_DEFINITIONS (-DVKVG_DBG_UTILS)
ENDIF ()
MESSAGE(STATUS "VKVG version\t\t= ${vkvg_VERSION_MAJOR}.${vkvg_VERSION_MINOR}.${vkvg_VERSION_PATCH}")
MESSAGE(STATUS "comp flags\t\t= ${CMAKE_${LANG}_FLAGS}")
-
IF (VKVG_BUILD_TESTS)
MESSAGE(STATUS "Build tests\t\t= true.")
ELSE ()
vkh_instance_extensions_check_release();
+#ifdef VK_VERSION_1_2
VkhApp app = vkh_app_create(1, 2, "vkvg", enabledLayersCount, enabledLayers, enabledExtsCount, enabledExts);
+#else
+ VkhApp app = vkh_app_create(1, 1, "vkvg", enabledLayersCount, enabledLayers, enabledExtsCount, enabledExts);
+#endif
#if defined(DEBUG) && defined (VKVG_DBG_UTILS)
if (dbgUtilsSupported)
//https://vulkan.lunarg.com/doc/view/1.2.162.0/mac/1.2-extensions/vkspec.html#VK_KHR_portability_subset
TRY_LOAD_DEVICE_EXT (VK_KHR_portability_subset)
TRY_LOAD_DEVICE_EXT (VK_KHR_relaxed_block_layout)
- TRY_LOAD_DEVICE_EXT (VK_EXT_scalar_block_layout)
VkPhysicalDeviceFeatures enabledFeatures = {
.fillModeNonSolid = true,
//.sampleRateShading = true
};
- VkPhysicalDeviceVulkan12Features enabledFeatures12 = {
- .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
- .scalarBlockLayout = true
- };
VkDeviceCreateInfo device_info = { .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
.queueCreateInfoCount = qCount,
.pQueueCreateInfos = (VkDeviceQueueCreateInfo*)&pQueueInfos,
.enabledExtensionCount = enabledExtsCount,
.ppEnabledExtensionNames = enabledExts,
- .pEnabledFeatures = &enabledFeatures,
- .pNext = &enabledFeatures12};
+ .pEnabledFeatures = &enabledFeatures};
+
+#ifdef VKVG_VK_SCALAR_BLOCK_SUPPORTED
+ #ifdef VK_VERSION_1_2
+ VkPhysicalDeviceVulkan12Features enabledFeatures12 = {
+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
+ .scalarBlockLayout = VK_TRUE
+ };
+ device_info.pNext = &enabledFeatures12;
+ #else
+ if (!vkh_phyinfo_try_get_extension_properties(pi, "VK_EXT_scalar_block_layout", NULL)) {
+ LOG(VKVG_LOG_ERR, "CREATE Device failed: VK_EXT_scalar_block_layout unsupported\n");
+ dev->status = VKVG_STATUS_DEVICE_ERROR;
+ vkh_app_free_phyinfos (phyCount, phys);
+ vkh_app_destroy (app);
+ return dev;
+ }
+ enabledExts[device_info.enabledExtensionCount++] = "VK_EXT_scalar_block_layout";
+ VkPhysicalDeviceScalarBlockLayoutFeaturesEXT scalarBlockFeat = {
+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT,
+ .scalarBlockLayout = VK_TRUE
+ };
+ device_info.pNext = &scalarBlockFeat;
+ #endif
+#endif
+
VkhDevice vkhd = vkh_device_create(app, pi, &device_info);
vkvg_color_t c = {r,g,b,a};
#endif
grad->colors[grad->count] = c;
+#ifdef VKVG_VK_SCALAR_BLOCK_SUPPORTED
grad->stops[grad->count] = offset;
+#else
+ grad->stops[grad->count].r = offset;
+#endif
grad->count++;
}
void vkvg_pattern_set_extend (VkvgPattern pat, vkvg_extend_t extend){
if (pat->type == VKVG_PATTERN_TYPE_SURFACE || pat->type == VKVG_PATTERN_TYPE_SOLID)
return VKVG_STATUS_PATTERN_TYPE_MISMATCH;
vkvg_gradient_t* grad = (vkvg_gradient_t*)pat->data;
+#ifdef VKVG_VK_SCALAR_BLOCK_SUPPORTED
*offset = grad->stops[index];
+#else
+ *offset = grad->stops[index].r;
+#endif
vkvg_color_t c = grad->colors[index];
*r = c.r;
*g = c.g;