From: Jean-Philippe Bruyère Date: Sun, 20 Feb 2022 04:49:43 +0000 (+0100) Subject: VKVG_VK_SCALAR_BLOCK_SUPPORTED fix X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=191e26ab08d6165f047b5e6924d2215771e12b2a;p=jp%2Fvkvg.git VKVG_VK_SCALAR_BLOCK_SUPPORTED fix --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 8bda960..89542ed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -128,6 +128,13 @@ CMAKE_DEPENDENT_OPTION(VKVG_BUILD_DOCS "build documentation" OFF "DOXYGEN_FOUND 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 () @@ -462,7 +469,6 @@ 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 () diff --git a/src/vkvg_device.c b/src/vkvg_device.c index e9bd130..6906951 100644 --- a/src/vkvg_device.c +++ b/src/vkvg_device.c @@ -161,7 +161,11 @@ VkvgDevice vkvg_device_create(VkSampleCountFlags samples, bool deferredResolve) 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) @@ -209,24 +213,43 @@ VkvgDevice vkvg_device_create(VkSampleCountFlags samples, bool deferredResolve) //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); diff --git a/src/vkvg_pattern.c b/src/vkvg_pattern.c index 5536d1e..ec74d27 100644 --- a/src/vkvg_pattern.c +++ b/src/vkvg_pattern.c @@ -138,7 +138,11 @@ vkvg_status_t vkvg_pattern_add_color_stop (VkvgPattern pat, float offset, float 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){ @@ -169,7 +173,11 @@ vkvg_status_t vkvg_pattern_get_color_stop_rgba (VkvgPattern pat, uint32_t index, 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; diff --git a/src/vkvg_pattern.h b/src/vkvg_pattern.h index bc5fb76..2c5589f 100644 --- a/src/vkvg_pattern.h +++ b/src/vkvg_pattern.h @@ -38,7 +38,11 @@ typedef struct _vkvg_pattern_t { typedef struct _vkvg_gradient_t { vkvg_color_t colors[16]; +#ifdef VKVG_VK_SCALAR_BLOCK_SUPPORTED float stops[16]; +#else + vec4 stops[16]; +#endif vec4 cp[2]; uint32_t count; }vkvg_gradient_t;