From: Jean-Philippe Bruyère Date: Wed, 9 May 2018 12:17:54 +0000 (+0200) Subject: LOG macro, some PIPELINE_STAGE changes in copy operations X-Git-Tag: v0.1-alpha~118 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=c3a85a55d7b588479370b7dbd3c52600958f54df;p=jp%2Fvkvg.git LOG macro, some PIPELINE_STAGE changes in copy operations --- diff --git a/include/vkvg.h b/include/vkvg.h index cef9ba4..fdb7f38 100644 --- a/include/vkvg.h +++ b/include/vkvg.h @@ -31,6 +31,19 @@ extern "C" { #define VKVG_SAMPLES 8 +#define LOG_ERR 0x00 +#define LOG_DEBUG 0x10 +#define LOG_INFO 0x20 +#define LOG_INFO_PATH 0x40 +#define LOG_FULL 0xff + +#ifdef DEBUG +static uint8_t log_level = LOG_INFO | LOG_DEBUG; +#define LOG(level,...) (log_level & level) ? fprintf (stdout, __VA_ARGS__):true; +#else +#define LOG +#endif + typedef enum _vkvg_direction { VKVG_HORIZONTAL = 0, VKVG_VERTICAL = 1 diff --git a/src/vkvg_context.c b/src/vkvg_context.c index d5c3eb5..f3e1762 100644 --- a/src/vkvg_context.c +++ b/src/vkvg_context.c @@ -33,6 +33,8 @@ static uint32_t dlpCount = 0; VkvgContext vkvg_create(VkvgSurface surf) { + LOG(LOG_INFO, "CREATE Context: surf = %lu\n", surf); + VkvgDevice dev = surf->dev; VkvgContext ctx = (vkvg_context*)calloc(1, sizeof(vkvg_context)); @@ -361,6 +363,7 @@ void _poly_fill (VkvgContext ctx){ _add_vertex(ctx, v); } + LOG(LOG_INFO_PATH, "\tpoly fill: point count = %d; 1st vert = %d; vert count = %d\n", pathPointCount, firstVertIdx, ctx->vertCount - firstVertIdx); vkCmdDraw (ctx->cmd, pathPointCount, 1, firstVertIdx ,0); ptrPath+=2; @@ -388,6 +391,8 @@ void vkvg_fill_preserve (VkvgContext ctx){ return; _finish_path(ctx); + LOG(LOG_INFO, "FILL: ctx = %lu; path cpt = %d;\n", ctx, ctx->pathPtr / 2); + if (ctx->pointCount * 4 > ctx->sizeIndices - ctx->indCount)//flush if vk buff is full vkvg_flush(ctx); @@ -404,6 +409,8 @@ void vkvg_stroke_preserve (VkvgContext ctx) return; _finish_path(ctx); + LOG(LOG_INFO, "STROKE: ctx = %lu; path cpt = %d;\n", ctx, ctx->pathPtr / 2); + if (ctx->pointCount * 4 > ctx->sizeIndices - ctx->indCount) vkvg_flush(ctx); @@ -419,8 +426,11 @@ void vkvg_stroke_preserve (VkvgContext ctx) uint32_t firstIdx = ctx->vertCount; i = ctx->pathes[ptrPath]; + LOG(LOG_INFO_PATH, "\tPATH: start = %d; ", ctx->pathes[ptrPath], ctx->pathes[ptrPath+1]); + if (_path_is_closed(ctx,ptrPath)){ lastPathPointIdx = _get_last_point_of_closed_path(ctx,ptrPath); + LOG(LOG_INFO_PATH, "end = %d\n", lastPathPointIdx); //prevent closing on the same position, this could be generalize //to prevent processing of two consecutive point at the same position if (vec2_equ(ctx->points[i], ctx->points[lastPathPointIdx])) @@ -428,6 +438,8 @@ void vkvg_stroke_preserve (VkvgContext ctx) iL = lastPathPointIdx; }else{ lastPathPointIdx = ctx->pathes[ptrPath+1]; + LOG(LOG_INFO_PATH, "end = %d\n", lastPathPointIdx); + vec2 n = vec2_line_norm(ctx->points[i], ctx->points[i+1]); vec2 p0 = ctx->points[i]; @@ -596,21 +608,23 @@ void vkvg_font_extents (VkvgContext ctx, vkvg_font_extents_t* extents) { } void vkvg_save (VkvgContext ctx){ + LOG(LOG_INFO, "SAVE CONTEXT: ctx = %lu\n", ctx); + _flush_cmd_buff(ctx); VkvgDevice dev = ctx->pSurf->dev; vkvg_context_save_t* sav = (vkvg_context_save_t*)calloc(1,sizeof(vkvg_context_save_t)); sav->stencilMS = vkh_image_ms_create(dev,VK_FORMAT_S8_UINT,VKVG_SAMPLES,ctx->pSurf->width,ctx->pSurf->height, - VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, + VMA_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT); vkh_cmd_begin (ctx->cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); vkh_image_set_layout (ctx->cmd, ctx->pSurf->stencilMS, VK_IMAGE_ASPECT_STENCIL_BIT, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT); + VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT); vkh_image_set_layout (ctx->cmd, sav->stencilMS, VK_IMAGE_ASPECT_STENCIL_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, - VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT); + VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT); VkImageCopy cregion = { .srcSubresource = {VK_IMAGE_ASPECT_STENCIL_BIT, 0, 0, 1}, .dstSubresource = {VK_IMAGE_ASPECT_STENCIL_BIT, 0, 0, 1}, @@ -665,6 +679,8 @@ void vkvg_restore (VkvgContext ctx){ if (ctx->pSavedCtxs == NULL) return; + LOG(LOG_INFO, "RESTORE CONTEXT: ctx = %lu\n", ctx); + vkvg_context_save_t* sav = ctx->pSavedCtxs; ctx->pSavedCtxs = sav->pNext; @@ -677,9 +693,9 @@ void vkvg_restore (VkvgContext ctx){ vkh_cmd_begin (ctx->cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); vkh_image_set_layout (ctx->cmd, ctx->pSurf->stencilMS, VK_IMAGE_ASPECT_STENCIL_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, - VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT); + VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT); vkh_image_set_layout (ctx->cmd, sav->stencilMS, VK_IMAGE_ASPECT_STENCIL_BIT, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT); + VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT); VkImageCopy cregion = { .srcSubresource = {VK_IMAGE_ASPECT_STENCIL_BIT, 0, 0, 1}, .dstSubresource = {VK_IMAGE_ASPECT_STENCIL_BIT, 0, 0, 1}, diff --git a/src/vkvg_context_internal.c b/src/vkvg_context_internal.c index 7d04465..f415531 100644 --- a/src/vkvg_context_internal.c +++ b/src/vkvg_context_internal.c @@ -169,6 +169,7 @@ void _create_cmd_buff (VkvgContext ctx){ ctx->cmd = vkh_cmd_buff_create(ctx->pSurf->dev, ctx->cmdPool,VK_COMMAND_BUFFER_LEVEL_PRIMARY); } void _record_draw_cmd (VkvgContext ctx){ + LOG(LOG_INFO, "RECORD DRAW CMD: ctx = %lu; vert cpt = %d; ind cpt = %d; ind drawn = %d\n", ctx, ctx->vertCount - 4, ctx->indCount - 6, ctx->indCount - ctx->curIndStart); if (ctx->indCount == ctx->curIndStart) return; vkCmdDrawIndexed(ctx->cmd, ctx->indCount - ctx->curIndStart, 1, ctx->curIndStart, 0, 1); @@ -216,6 +217,7 @@ void _explicit_ms_resolve (VkvgContext ctx){ } void _flush_cmd_buff (VkvgContext ctx){ + LOG(LOG_INFO, "FLUSH Context: ctx = %lu; vert cpt = %d; ind cpt = %d\n", ctx, ctx->vertCount -4, ctx->indCount - 6); _record_draw_cmd (ctx); vkCmdEndRenderPass (ctx->cmd); //_explicit_ms_resolve (ctx); diff --git a/src/vkvg_device.c b/src/vkvg_device.c index a494aa7..7cbc8d5 100644 --- a/src/vkvg_device.c +++ b/src/vkvg_device.c @@ -27,6 +27,8 @@ VkvgDevice vkvg_device_create(VkPhysicalDevice phy, VkDevice vkdev, uint32_t qFamIdx, uint32_t qIndex) { + LOG(LOG_INFO, "CREATE Device: qFam = %d; qIdx = %d\n", qFamIdx, qIndex); + VkvgDevice dev = (vkvg_device*)malloc(sizeof(vkvg_device)); dev->hdpi = 72; @@ -70,6 +72,8 @@ void vkvg_device_destroy (VkvgDevice dev) if (dev->references > 0) return; + LOG(LOG_INFO, "DESTROY Device\n"); + vkDestroyDescriptorSetLayout (dev->vkDev, dev->dslGrad,NULL); vkDestroyDescriptorSetLayout (dev->vkDev, dev->dslFont,NULL); vkDestroyDescriptorSetLayout (dev->vkDev, dev->dslSrc, NULL); diff --git a/src/vkvg_device_internal.c b/src/vkvg_device_internal.c index 51b2d2e..aaa802c 100644 --- a/src/vkvg_device_internal.c +++ b/src/vkvg_device_internal.c @@ -66,10 +66,10 @@ void _setupRenderPass(VkvgDevice dev) VkAttachmentDescription attDS = { .format = VK_FORMAT_S8_UINT, .samples = VKVG_SAMPLES, - .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD, - .storeOp = VK_ATTACHMENT_STORE_OP_STORE, - .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE, - .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE, + .loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE, + .storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE, + .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD, + .stencilStoreOp = VK_ATTACHMENT_STORE_OP_STORE, .initialLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, .finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL }; /* VkAttachmentDescription attDSResolve = { diff --git a/vkh b/vkh index 6362a53..7878c4f 160000 --- a/vkh +++ b/vkh @@ -1 +1 @@ -Subproject commit 6362a530a88166df5b52376bd2107e7a531b2411 +Subproject commit 7878c4fef0d0afb1b07b37b62306f59e037cf32a