]> O.S.I.I.S - jp/vkvg.git/commitdiff
USE_VALIDATION and VKVG_TILING_OPTIMAL cmake options, width and height as variables...
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Sat, 4 Aug 2018 16:04:26 +0000 (18:04 +0200)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Sat, 4 Aug 2018 16:04:26 +0000 (18:04 +0200)
CMakeLists.txt
include/vkvg.h
shaders/vkvg_main.frag
src/vkvg_surface.c
tests/test1.c
tests/vkengine.c
vkh

index eab64e3ee271cff4287cfd99212d567699320a81..bc0670db68626dd954f5e2b7f5aa2a9f83ee0656 100644 (file)
@@ -9,12 +9,17 @@ SET(CMAKE_EXE_LINKER_FLAGS "-lm")
 IF(NOT CMAKE_BUILD_TYPE)
   SET(CMAKE_BUILD_TYPE Debug)
 ENDIF()
-MESSAGE(STATUS "${CMAKE_BUILD_TYPE} build.")
 
 if (CMAKE_BUILD_TYPE STREQUAL "Debug")
        ADD_DEFINITIONS (-DDEBUG)
 ENDIF()
 
+OPTION(VKVG_TILING_OPTIMAL "use VK_IMAGE_TILING_OPTIMAL for surface backend texture" OFF)
+IF (VKVG_TILING_OPTIMAL)
+       add_compile_options(-DVKVG_TILING_OPTIMAL)
+       ADD_DEFINITIONS (-DVKVG_TILING_OPTIMAL)
+ENDIF ()
+
 OPTION(VKVG_BUILD_TESTS "build tests with glfw" ON)
 
 set(VULKAN_SDK "$ENV{VULKAN_SDK}" CACHE STRING "LunarG Vulkan SDK path")
@@ -23,11 +28,15 @@ if (VULKAN_SDK)
                SET(ENV{VK_LAYER_PATH} "${VULKAN_SDK}/etc/explicit_layer.d")
 endif ()
 
-MESSAGE(STATUS "VULKAN_SDK = $ENV{VULKAN_SDK}")
-MESSAGE(STATUS "VK_LAYER_PATH = $ENV{VK_LAYER_PATH}")
-
 add_subdirectory (vkh)
 
+SET(ENABLE_VALIDATION OFF CACHE BOOL "Enable vulkan validation layer")
+
+IF (ENABLE_VALIDATION)
+       ADD_DEFINITIONS (-DVKVG_USE_VALIDATION)
+ENDIF ()
+
+
 #be aware that system libraries have priority on SDK in the finding.
 FIND_PACKAGE(Vulkan REQUIRED)
 FIND_PACKAGE(GLFW3)
@@ -157,3 +166,19 @@ if (GLFW3_FOUND)
                vkvg
        )
 endif ()
+
+MESSAGE(STATUS "\n\n--------------------------------------------------------------------------")
+       MESSAGE(STATUS "Build type\t\t= ${CMAKE_BUILD_TYPE}")
+       MESSAGE(STATUS "VULKAN_SDK\t\t= $ENV{VULKAN_SDK}")
+       MESSAGE(STATUS "VK_LAYER_PATH\t= $ENV{VK_LAYER_PATH}")
+IF (ENABLE_VALIDATION)
+       MESSAGE(STATUS "Validation\t\t= disabled.")
+ELSE ()
+       MESSAGE(STATUS "Validation\t\t= enabled.")
+ENDIF ()
+IF (VKVG_TILING_OPTIMAL)
+MESSAGE(STATUS "Surface tiling\t= VK_IMAGE_TILING_OPTIMAL.")
+ELSE ()
+MESSAGE(STATUS "Surface tiling\t= VK_IMAGE_TILING_LINEAR.")
+ENDIF ()
+MESSAGE(STATUS "---------------------------------------------------------------------------\n\n")
index b73f3cefab90910903a2fbb6ef70de73eef2e29a..dd67a88f955573e8fc39e131d2fb80feb7867724 100644 (file)
@@ -29,6 +29,12 @@ extern "C" {
 #include <vulkan/vulkan.h>
 #include <math.h>
 
+#ifdef VKVG_TILING_OPTIMAL
+    #define VKVG_TILING VK_IMAGE_TILING_OPTIMAL
+#else
+    #define VKVG_TILING VK_IMAGE_TILING_LINEAR
+#endif
+
 #define VKVG_SAMPLES 4
 
 #define LOG_ERR                        0x00
index 161296fa76fc835c231e76166b80eabf7100c445..8a3209033b04e3d8533926511ad5e9f5523f6d35 100644 (file)
@@ -34,7 +34,7 @@ layout (set=2, binding = 0) uniform _uboGrad {
 }uboGrad;
 
 layout (location = 0) in vec3  inFontUV;               //if it is a text drawing, inFontUV.z hold fontMap layer
-layout (location = 1) in vec4  inSrc;                  //source bounds
+layout (location = 1) in vec4  inSrc;                  //source bounds or color
 layout (location = 2) in flat int inPatType;
 layout (location = 3) in mat3x2 inMat;
 
index 6e6baf51f35a40409f7c430698bc2bca7d4e39ee..0323d2aa13333123be02c7860fbc9fa2f2f22c45 100644 (file)
@@ -75,7 +75,7 @@ void _clear_surface (VkvgSurface surf, VkImageAspectFlags aspect)
 
 void _init_surface (VkvgSurface surf) {
     surf->format = FB_COLOR_FORMAT;//force bgra internally
-    surf->img = vkh_image_create(surf->dev,surf->format,surf->width,surf->height,VK_IMAGE_TILING_LINEAR,VMA_MEMORY_USAGE_GPU_ONLY,
+    surf->img = vkh_image_create(surf->dev,surf->format,surf->width,surf->height,VKVG_TILING,VMA_MEMORY_USAGE_GPU_ONLY,
                                      VK_IMAGE_USAGE_SAMPLED_BIT|VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT|VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT);
     surf->imgMS = vkh_image_ms_create(surf->dev,surf->format,VKVG_SAMPLES,surf->width,surf->height,VMA_MEMORY_USAGE_GPU_ONLY,
                                      VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
@@ -310,7 +310,7 @@ void vkvg_surface_write_to_png (VkvgSurface surf, const char* path){
 
     vkh_cmd_end     (cmd);
     vkh_cmd_submit  (dev->gQueue, &cmd, dev->fence);
-    _wait_and_reset_device_fence (dev);
+    vkWaitForFences (dev->vkDev, 1, &dev->fence, VK_TRUE, UINT64_MAX);
 
     void* img = vkh_image_map (stagImg);
 
@@ -319,6 +319,7 @@ void vkvg_surface_write_to_png (VkvgSurface surf, const char* path){
     vkh_image_unmap (stagImg);
     vkh_image_destroy (stagImg);
 }
+
 /*VkhImage vkvg_surface_get_vkh_image(VkvgSurface surf)
 {
     return surf->img;
index 4e119ca20c6f5f56a2f7e1748840db6d1c673385..12407f7f8baccb080680502008d32c7b1dd8b47a 100644 (file)
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-
 #include "vkengine.h"
+
 #include "vkvg.h"
+
 #include "string.h" //for nanosvg
 #define NANOSVG_IMPLEMENTATION // Expands implementation
 #include "nanosvg.h"
@@ -333,7 +334,7 @@ void test_img_surface () {
     vkvg_set_source_surface(ctx, imgSurf, 0, 0);
     vkvg_paint(ctx);
     //vkvg_flush(ctx);
-    vkvg_set_source_rgba(ctx,1,0,0,1);
+    //vkvg_set_source_rgba(ctx,1,0,0,1);
 
     vkvg_surface_destroy(imgSurf);
     vkvg_destroy(ctx);
@@ -1061,10 +1062,14 @@ void simple_paint () {
     vkvg_destroy(ctx);
 }
 void simple_rectangle_fill () {
+    vkvg_surface_clear(surf);
     VkvgContext ctx = vkvg_create(surf);
-    vkvg_set_source_rgba(ctx,0,1,0,1);
+    vkvg_set_line_width(ctx,10);
+    vkvg_set_source_rgba(ctx,0,0,1,0.2);
     vkvg_rectangle(ctx,100,100,200,200);
-    vkvg_fill(ctx);
+    vkvg_fill_preserve(ctx);
+    vkvg_set_source_rgba(ctx,1,0,0,0.2);
+    vkvg_stroke(ctx);
     vkvg_destroy(ctx);
 }
 void simple_rectangle_stroke () {
@@ -1075,40 +1080,49 @@ void simple_rectangle_stroke () {
     vkvg_stroke(ctx);
     vkvg_destroy(ctx);
 }
+void lines_stroke () {
+    VkvgContext ctx = vkvg_create(surf);
+    vkvg_set_source_rgba(ctx,1,1,1,1);
+    vkvg_paint(ctx);
+    vkvg_set_source_rgba(ctx,0,0,0,0.9f);
+    vkvg_set_line_width(ctx,10.f);
+    vkvg_move_to(ctx,50,50);
+    vkvg_line_to(ctx,300,250);
+    vkvg_stroke(ctx);
+    vkvg_destroy(ctx);
+}
 int main(int argc, char *argv[]) {
-
     //dumpLayerExts();
+    int width=1024, height=768;
 
-    vk_engine_t* e = vkengine_create (VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, 1024, 800);
+    vk_engine_t* e = vkengine_create (VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, width, height);
     VkhPresenter r = e->renderer;
     vkengine_set_key_callback (e, key_callback);
 
     device  = vkvg_device_create (r->dev->phy, r->dev->dev, r->qFam, 0);
-    surf    = vkvg_surface_create(device, 1024, 800);
+    surf    = vkvg_surface_create(device, width, height);
 
     //test_svg();
-    //
-
-
-
-
     //test_grad_transforms();
     //test_colinear();
 
-    vkh_presenter_build_blit_cmd (r, vkvg_surface_get_vk_image(surf));
+    vkh_presenter_build_blit_cmd (r, vkvg_surface_get_vk_image(surf), width, height);
 
     while (!vkengine_should_close (e)) {
         glfwPollEvents();
-        //test_1();
         cairo_tests();
+        //test_1();
+        //vkvg_surface_clear(surf);
         //simple_paint();
         //simple_rectangle_stroke();
         //simple_rectangle_fill();
         //test_img_surface();
         //multi_test1();
         //test_painting();
+        //vkvg_surface_clear(surf);
+        //lines_stroke();
         if (!vkh_presenter_draw (r))
-            vkh_presenter_build_blit_cmd (r, vkvg_surface_get_vk_image(surf));
+            vkh_presenter_build_blit_cmd (r, vkvg_surface_get_vk_image(surf), width, height);
     }
 
     vkDeviceWaitIdle(e->dev->dev);
index e4f04fb07e42b2844896e76af2baa637cd5bc5a4..7dc0c3e0abedc47b0b3f735e6932a8d4e6c6f92f 100644 (file)
@@ -31,7 +31,7 @@
 bool vkeCheckPhyPropBlitSource (VkEngine e) {
     VkFormatProperties formatProps;
     vkGetPhysicalDeviceFormatProperties(e->dev->phy, e->renderer->format, &formatProps);
-    assert((formatProps.linearTilingFeatures & VK_FORMAT_FEATURE_BLIT_SRC_BIT) && "Format cannot be used as transfer source");
+    assert((formatProps.optimalTilingFeatures & VK_FORMAT_FEATURE_BLIT_SRC_BIT) && "Format cannot be used as transfer source");
 }
 
 VkSampleCountFlagBits getMaxUsableSampleCount(VkSampleCountFlags counts)
@@ -146,15 +146,16 @@ vk_engine_t* vkengine_create (VkPhysicalDeviceType preferedGPU, uint32_t width,
     }
 
     char const * dex [] = {"VK_KHR_swapchain"};
-/*#if DEBUG
+#if VKVG_USE_VALIDATION
     uint32_t dlayCpt = 1;
     static char const * dlay [] = {"VK_LAYER_LUNARG_standard_validation"};
-#else*/
+#else
     uint32_t dlayCpt = 0;
     static char const * dlay [] = {};
-//#endif
+#endif
     VkPhysicalDeviceFeatures enabledFeatures = {
         .fillModeNonSolid = true,
+        .sampleRateShading = true
     };
 
     VkDeviceCreateInfo device_info = { .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
@@ -200,14 +201,14 @@ void vkengine_destroy (VkEngine e) {
 void vkengine_close (VkEngine e) {
     glfwSetWindowShouldClose(e->window, GLFW_TRUE);
 }
-void vkengine_blitter_run (VkEngine e, VkImage img) {
+void vkengine_blitter_run (VkEngine e, VkImage img, uint32_t width, uint32_t height) {
     VkhPresenter p = e->renderer;
-    vkh_presenter_build_blit_cmd (p, img);
+    vkh_presenter_build_blit_cmd (p, img, width, height);
 
     while (!vkengine_should_close (e)) {
         glfwPollEvents();
         if (!vkh_presenter_draw (p))
-            vkh_presenter_build_blit_cmd (p, img);
+            vkh_presenter_build_blit_cmd (p, img, width, height);
     }
 }
 inline bool vkengine_should_close (VkEngine e) {
diff --git a/vkh b/vkh
index b214df90867efb46c8cf45146c1bbebe110df0c0..dbb60ff40bb78e19391afbc7153a199a281a87e3 160000 (submodule)
--- a/vkh
+++ b/vkh
@@ -1 +1 @@
-Subproject commit b214df90867efb46c8cf45146c1bbebe110df0c0
+Subproject commit dbb60ff40bb78e19391afbc7153a199a281a87e3