]> O.S.I.I.S - jp/vkvg.git/commitdiff
VKVG_VK_SCALAR_BLOCK_SUPPORTED fix
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Sun, 20 Feb 2022 04:49:43 +0000 (05:49 +0100)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Sun, 20 Feb 2022 04:49:43 +0000 (05:49 +0100)
CMakeLists.txt
src/vkvg_device.c
src/vkvg_pattern.c
src/vkvg_pattern.h

index 8bda96061c3876a7119ef2a172d1f50887df87de..89542ed1c1fe9a880b6ec37f01125375e935ebf9 100644 (file)
@@ -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 ()
index e9bd13001bbcf277267191c5f6c3f53a6932b142..69069512b315fec5d9d1f3f1a63f96a43c3e8e3d 100644 (file)
@@ -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);
 
index 5536d1ec454ad5568062d06a90e0ff6164138cf7..ec74d27c1d865d8e3f64d4ae2338a3a4f508b03f 100644 (file)
@@ -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;
index bc5fb761503092220054dadbeaa26e20ff7e3fa8..2c5589f5cb04c44b5e592bb951faacd46f68de9b 100644 (file)
@@ -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;