]> O.S.I.I.S - jp/vkvg.git/commitdiff
remove fences in direct draw, rect fill test with rounded float, check arrays
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Thu, 5 Sep 2019 14:30:20 +0000 (16:30 +0200)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Thu, 5 Sep 2019 14:30:20 +0000 (16:30 +0200)
src/vkvg_context_internal.c
src/vkvg_device_internal.c
tests/common/test.c
tests/common/vkengine.c
tests/curve.c
tests/random_rects.c
vkh

index b8411e46739099b43b5f12b691a00d7aae368679..48e9bf87eb6dfeb3135dff88c09d6675eeb9d562 100644 (file)
@@ -47,19 +47,43 @@ void _check_vbo_size (VkvgContext ctx) {
     if (ctx->sizeVertices - ctx->vertCount > VKVG_ARRAY_THRESHOLD)
         return;
     ctx->sizeVertices += VKVG_VBO_SIZE;
-    ctx->vertexCache = (Vertex*) realloc (ctx->vertexCache, ctx->sizeVertices * sizeof(Vertex));
+    Vertex* tmp = (Vertex*) realloc (ctx->vertexCache, ctx->sizeVertices * sizeof(Vertex));
+    if (tmp == NULL)
+        ctx->status = VKVG_STATUS_NO_MEMORY;
+    else
+        ctx->vertexCache = tmp;
 }
 void _check_ibo_size (VkvgContext ctx) {
     if (ctx->sizeIndices - ctx->indCount > VKVG_ARRAY_THRESHOLD)
         return;
     ctx->sizeIndices += VKVG_IBO_SIZE;
-    ctx->indexCache = (VKVG_IBO_INDEX_TYPE*) realloc (ctx->indexCache, ctx->sizeIndices * sizeof(VKVG_IBO_INDEX_TYPE));
+    VKVG_IBO_INDEX_TYPE* tmp = (VKVG_IBO_INDEX_TYPE*) realloc (ctx->indexCache, ctx->sizeIndices * sizeof(VKVG_IBO_INDEX_TYPE));
+    if (tmp == NULL)
+        ctx->status = VKVG_STATUS_NO_MEMORY;
+    else
+        ctx->indexCache = tmp;
 }
 void _check_pathes_array (VkvgContext ctx){
     if (ctx->sizePathes - ctx->pathPtr - ctx->curvePtr > VKVG_ARRAY_THRESHOLD)
         return;
     ctx->sizePathes += VKVG_PATHES_SIZE;
-    ctx->pathes = (uint32_t*) realloc (ctx->pathes, ctx->sizePathes * sizeof(uint32_t));
+    uint32_t* tmp = (uint32_t*) realloc (ctx->pathes, ctx->sizePathes * sizeof(uint32_t));
+    if (tmp == NULL){
+        ctx->status = VKVG_STATUS_NO_MEMORY;
+        ctx->pathPtr = 0 + (ctx->pathPtr % 2);
+    }else
+        ctx->pathes = tmp;
+}
+void _check_point_array (VkvgContext ctx){
+    if (ctx->sizePoints - ctx->pointCount > VKVG_ARRAY_THRESHOLD)
+        return;
+    ctx->sizePoints += VKVG_PATHES_SIZE;
+    vec2* tmp = (vec2*) realloc (ctx->points, ctx->sizePoints * sizeof(vec2));
+    if (tmp == NULL){
+        ctx->status = VKVG_STATUS_NO_MEMORY;
+        ctx->pointCount = 0;
+    }else
+        ctx->points = tmp;
 }
 //when empty, ptr is even, else it's odd
 //when empty, no current point is defined.
@@ -125,6 +149,8 @@ void _add_point (VkvgContext ctx, float x, float y){
     ctx->points[ctx->pointCount] = (vec2){x,y};
     ctx->pointCount++;
 
+    _check_point_array(ctx);
+
     //bounds are computed here to scissor the painting operation
     //that speed up fill drastically.
     vkvg_matrix_transform_point (&ctx->pushConsts.mat, &x, &y);
index 244d65293d2afcc6a9588097c4569addd73bc7c2..a7053fc6e665423b6d07003f4b4fb9796a5f0759 100644 (file)
@@ -58,7 +58,7 @@ VkRenderPass _createRenderPassNoResolve(VkvgDevice dev, VkAttachmentLoadOp loadO
                     .storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
                     .stencilLoadOp = stencilLoadOp,
                     .stencilStoreOp = VK_ATTACHMENT_STORE_OP_STORE,
-                    .initialLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
+                    .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
                     .finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL };
 
     VkAttachmentDescription attachments[] = {attColor,attDS};
@@ -112,7 +112,7 @@ VkRenderPass _createRenderPassMS(VkvgDevice dev, VkAttachmentLoadOp loadOp, VkAt
                     .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
                     .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
                     .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
-                    .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
+                    .initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
                     .finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL };
     VkAttachmentDescription attDS = {
                     .format = FB_STENCIL_FORMAT,
index 0cba5d2665c128e044b8bf3c3572baeb7fdefc41..5b662e6874053f80cceb9d7f7e3d5171493d5c2f 100644 (file)
@@ -62,10 +62,10 @@ double time_diff(struct timeval x , struct timeval y)
 
 void randomize_color (VkvgContext ctx) {
     vkvg_set_source_rgba(ctx,
-        1.0f,//(float)rand()/RAND_MAX,
         (float)rand()/RAND_MAX,
         (float)rand()/RAND_MAX,
-        0.5f//(float)rand()/RAND_MAX
+        (float)rand()/RAND_MAX,
+        0.5f//0.8f*rand()/RAND_MAX + 0.2f
     );
 }
 
@@ -143,12 +143,11 @@ void perform_test (void(*testfunc)(void),uint width, uint height) {
 
     bool deferredResolve = false;
 
-    device  = vkvg_device_create_multisample(vkh_app_get_inst(e->app), r->dev->phy, r->dev->dev, r->qFam, 0, VK_SAMPLE_COUNT_1_BIT, deferredResolve);
+    device  = vkvg_device_create_multisample(vkh_app_get_inst(e->app), r->dev->phy, r->dev->dev, r->qFam, 0, VK_SAMPLE_COUNT_4_BIT, deferredResolve);
 
     vkvg_device_set_dpy(device, 96, 96);
 
 #ifdef VKVG_TEST_DIRECT_DRAW
-    VkFence* fences = (VkFence*)calloc(r->imgCount, sizeof (VkFence));
     surfaces = (VkvgSurface*)malloc(r->imgCount * sizeof (VkvgSurface));
     for (uint i=0; i < r->imgCount;i++)
         surfaces[i] = vkvg_surface_create_for_VkhImage (device, r->ScBuffers[i]);
@@ -165,27 +164,17 @@ void perform_test (void(*testfunc)(void),uint width, uint height) {
         gettimeofday(&before , NULL);
 
 #ifdef VKVG_TEST_DIRECT_DRAW
-        VkFence fence = vkh_fence_create (e->dev);
-
-        if (!vkh_presenter_acquireNextImage(r, fence)) {
-            for (uint i=0; i < r->imgCount;i++){
-                if (fences[i]!=NULL){
-                    vkDestroyFence (e->dev->dev, fences[i], NULL);
-                    fences[i] = NULL;
-                }
+
+        if (!vkh_presenter_acquireNextImage(r, NULL, NULL)) {
+            for (uint i=0; i < r->imgCount;i++)
                 vkvg_surface_destroy (surfaces[i]);
-            }
-            vkDestroyFence (e->dev->dev, fence, NULL);
+
             vkh_presenter_create_swapchain (r);
+
             for (uint i=0; i < r->imgCount;i++)
                 surfaces[i] = vkvg_surface_create_for_VkhImage (device, r->ScBuffers[i]);
         }else{
             surf = surfaces[r->currentScBufferIndex];
-            if (fences[r->currentScBufferIndex] != NULL){
-                vkWaitForFences (e->dev->dev, 1, &fences[r->currentScBufferIndex], VK_TRUE, UINT64_MAX);
-                vkDestroyFence (e->dev->dev, fences[r->currentScBufferIndex], NULL);
-            }
-            fences[r->currentScBufferIndex] = fence;
 
             testfunc();
 
@@ -208,7 +197,7 @@ void perform_test (void(*testfunc)(void),uint width, uint height) {
             vkh_presenter_build_blit_cmd (r, vkvg_surface_get_vk_image(surf), width, height);
 #endif
 
-        //vkDeviceWaitIdle(e->dev->dev);
+        vkDeviceWaitIdle(e->dev->dev);
 
         gettimeofday(&after , NULL);
 
@@ -223,12 +212,9 @@ void perform_test (void(*testfunc)(void),uint width, uint height) {
     vkDeviceWaitIdle(e->dev->dev);
 
 #ifdef VKVG_TEST_DIRECT_DRAW
-    for (int i=0; i<r->imgCount;i++){
+    for (uint i=0; i<r->imgCount;i++)
         vkvg_surface_destroy (surfaces[i]);
-        if (fences[i]!=NULL)
-            vkDestroyFence (e->dev->dev, fences[i], NULL);
-    }
-    free (fences);
+
     free (surfaces);
 #else
     vkvg_surface_destroy    (surf);
index 6f7265c66ab93bfcfd909faf773585ad55417773..4b54ead2e8def1bd2eb48279bff08289219afa83 100644 (file)
@@ -109,7 +109,7 @@ vk_engine_t* vkengine_create (VkPhysicalDeviceType preferedGPU, VkPresentModeKHR
     for (uint i=0;i<enabledExtsCount;i++)
         enabledExts[i] = gflwExts[i];
 
-#if defined (ENABLE_VALIDATION)
+#if defined (VKVG_USE_VALIDATION)
     const uint32_t enabledLayersCount = 2;
     const char* enabledLayers[] = {"VK_LAYER_KHRONOS_validation", "VK_LAYER_RENDERDOC_Capture"};
 #else
@@ -187,7 +187,7 @@ vk_engine_t* vkengine_create (VkPhysicalDeviceType preferedGPU, VkPresentModeKHR
         }
     }
 
-#if defined(DEBUG) && defined(ENABLE_VALIDATION)
+#if defined(DEBUG) && defined(VKVG_USE_VALIDATION)
     char const * dex [] = {"VK_KHR_swapchain", "VK_EXT_debug_marker"};
     enabledExtsCount = 2;
 #else
index d64545bd08e720c35fb1f64451d63b5cfb3f9750..38c4620639ef23cd3e4f0f5454113d61f4395915 100644 (file)
@@ -4,8 +4,9 @@ void test(){
     VkvgContext ctx = vkvg_create(surf);
 
     vkvg_set_fill_rule(ctx, VKVG_FILL_RULE_NON_ZERO);
-    vkvg_set_line_width(ctx, 50);
+    vkvg_set_line_width(ctx, 20);
 
+    vkvg_scale(ctx,2,2);
     vkvg_set_line_join(ctx, VKVG_LINE_JOIN_BEVEL);
 
     //vkvg_arc (ctx, 200, 500, 100, 0, M_PI);
index 736f676dfc460026b8ddc9aaed72d79e658ad9a6..b202c1f51991d9aa41c0c2ec8abd23f92dcebf1e 100644 (file)
@@ -1,7 +1,6 @@
 #include "test.h"
 
 void test(){
-    vkvg_surface_clear(surf);
     struct timeval currentTime;
     gettimeofday(&currentTime, NULL);
 
@@ -11,20 +10,21 @@ void test(){
     VkvgContext ctx = vkvg_create(surf);
     vkvg_set_fill_rule(ctx, VKVG_FILL_RULE_EVEN_ODD);
 
+    vkvg_clear(ctx);
     //vkvg_set_line_join(ctx,VKVG_LINE_JOIN_BEVEL);
 
-    for (int i=0; i<iterations; i++) {
+    for (uint i=0; i<iterations; i++) {
         randomize_color(ctx);
 
-        float x = 0.5f*w*rand()/RAND_MAX;
-        float y = 0.5f*w*rand()/RAND_MAX;
-        float z = 0.5f*w*rand()/RAND_MAX;
-        float v = 0.5f*w*rand()/RAND_MAX;
+        float x = truncf(0.8f*w*rand()/RAND_MAX);
+        float y = truncf(0.8f*w*rand()/RAND_MAX);
+        float z = truncf((0.2f*w*rand()/RAND_MAX)+1.f);
+        float v = truncf((0.2f*w*rand()/RAND_MAX)+1.f);
 
         vkvg_rectangle(ctx, x, y, z, v);
         vkvg_fill(ctx);
 
-        if (i%30==0)
+        if (i%250==0)
             vkvg_flush(ctx);
     }
     vkvg_destroy(ctx);
@@ -32,7 +32,7 @@ void test(){
 
 int main(int argc, char *argv[]) {
 
-    perform_test (test, 1024, 768);
+    perform_test (test, 800, 600);
 
     return 0;
 }
diff --git a/vkh b/vkh
index bced7146e49377256b4e4ab8856e02a7b3a50355..dd13cd6f6dcf94420f0919a2ca2837739cb46ea1 160000 (submodule)
--- a/vkh
+++ b/vkh
@@ -1 +1 @@
-Subproject commit bced7146e49377256b4e4ab8856e02a7b3a50355
+Subproject commit dd13cd6f6dcf94420f0919a2ca2837739cb46ea1