From: Jean-Philippe Bruyère Date: Wed, 3 Oct 2018 10:41:37 +0000 (+0200) Subject: function pointers for most used ones X-Git-Tag: v0.1-alpha~107^2~9 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=ff1c98d9c8693b0ef368bbb6d03c3748c161f00a;p=jp%2Fvkvg.git function pointers for most used ones --- diff --git a/include/vkvg.h b/include/vkvg.h index dfba3a3..4657718 100644 --- a/include/vkvg.h +++ b/include/vkvg.h @@ -143,7 +143,7 @@ typedef struct _vkvg_surface_t* VkvgSurface; typedef struct _vkvg_device_t* VkvgDevice; typedef struct _vkvg_pattern_t* VkvgPattern; -VkvgDevice vkvg_device_create (VkPhysicalDevice phy, VkDevice vkdev, uint32_t qFamIdx, uint32_t qIndex); +VkvgDevice vkvg_device_create (VkInstance inst, VkPhysicalDevice phy, VkDevice vkdev, uint32_t qFamIdx, uint32_t qIndex); void vkvg_device_destroy (VkvgDevice dev); VkvgDevice vkvg_device_reference (VkvgDevice dev); uint32_t vkvg_device_get_reference_count (VkvgDevice dev); diff --git a/src/vkvg_context.c b/src/vkvg_context.c index d041024..75b0ab9 100644 --- a/src/vkvg_context.c +++ b/src/vkvg_context.c @@ -114,8 +114,8 @@ void vkvg_flush (VkvgContext ctx){ j+=2; } dlpCount = 0; - vkCmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineLineList); - vkCmdDrawIndexed(ctx->cmd, ctx->indCount-ctx->curIndStart, 1, ctx->curIndStart, 0, 1); + CmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineLineList); + CmdDrawIndexed(ctx->cmd, ctx->indCount-ctx->curIndStart, 1, ctx->curIndStart, 0, 1); _flush_cmd_buff(ctx); #endif */ @@ -355,7 +355,7 @@ void vkvg_fill (VkvgContext ctx){ _clear_path(ctx); } void _poly_fill (VkvgContext ctx){ - vkCmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelinePolyFill); + CmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelinePolyFill); uint32_t ptrPath = 0;; Vertex v = {}; @@ -377,7 +377,7 @@ void _poly_fill (VkvgContext ctx){ } 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); + CmdDraw (ctx->cmd, pathPointCount, 1, firstVertIdx ,0); ptrPath+=2; } @@ -393,12 +393,12 @@ void vkvg_clip_preserve (VkvgContext ctx){ _check_cmd_buff_state(ctx); _poly_fill (ctx); - vkCmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineClipping); - vkCmdDrawIndexed (ctx->cmd,6,1,0,0,0); + CmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineClipping); + CmdDrawIndexed (ctx->cmd,6,1,0,0,0); //should test current operator to bind correct pipeline _bind_draw_pipeline (ctx); - vkCmdSetStencilCompareMask(ctx->cmd, VK_STENCIL_FRONT_AND_BACK, STENCIL_CLIP_BIT); + CmdSetStencilCompareMask(ctx->cmd, VK_STENCIL_FRONT_AND_BACK, STENCIL_CLIP_BIT); } void vkvg_fill_preserve (VkvgContext ctx){ if (ctx->pathPtr == 0) //nothing to fill @@ -414,9 +414,9 @@ void vkvg_fill_preserve (VkvgContext ctx){ _poly_fill (ctx); _bind_draw_pipeline (ctx); - vkCmdSetStencilCompareMask(ctx->cmd, VK_STENCIL_FRONT_AND_BACK, STENCIL_FILL_BIT); - vkCmdDrawIndexed (ctx->cmd,6,1,0,0,0); - vkCmdSetStencilCompareMask(ctx->cmd, VK_STENCIL_FRONT_AND_BACK, STENCIL_CLIP_BIT); + CmdSetStencilCompareMask(ctx->cmd, VK_STENCIL_FRONT_AND_BACK, STENCIL_FILL_BIT); + CmdDrawIndexed (ctx->cmd,6,1,0,0,0); + CmdSetStencilCompareMask(ctx->cmd, VK_STENCIL_FRONT_AND_BACK, STENCIL_CLIP_BIT); } void vkvg_stroke_preserve (VkvgContext ctx) { @@ -551,7 +551,7 @@ void vkvg_stroke_preserve (VkvgContext ctx) } void vkvg_paint (VkvgContext ctx){ _check_cmd_buff_state(ctx); - vkCmdDrawIndexed (ctx->cmd,6,1,0,0,0); + CmdDrawIndexed (ctx->cmd,6,1,0,0,0); } inline void vkvg_set_source_rgb (VkvgContext ctx, float r, float g, float b) { vkvg_set_source_rgba (ctx, r, g, b, 1); diff --git a/src/vkvg_context_internal.c b/src/vkvg_context_internal.c index c4588db..f80f4a9 100644 --- a/src/vkvg_context_internal.c +++ b/src/vkvg_context_internal.c @@ -182,12 +182,12 @@ void _record_draw_cmd (VkvgContext ctx){ if (ctx->indCount == ctx->curIndStart) return; _check_cmd_buff_state(ctx); - vkCmdDrawIndexed(ctx->cmd, ctx->indCount - ctx->curIndStart, 1, ctx->curIndStart, 0, 1); + CmdDrawIndexed(ctx->cmd, ctx->indCount - ctx->curIndStart, 1, ctx->curIndStart, 0, 1); //DEBUG - /*vkCmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineWired); - vkCmdDrawIndexed(ctx->cmd, ctx->indCount - ctx->curIndStart, 1, ctx->curIndStart, 0, 1); - vkCmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipe_OVER);*/ + /*CmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineWired); + CmdDrawIndexed(ctx->cmd, ctx->indCount - ctx->curIndStart, 1, ctx->curIndStart, 0, 1); + CmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipe_OVER);*/ ////////// ctx->curIndStart = ctx->indCount; @@ -237,7 +237,7 @@ void _explicit_ms_resolve (VkvgContext ctx){//should init cmd before calling thi void _end_render_pass (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); + CmdEndRenderPass (ctx->cmd); } void _flush_cmd_buff (VkvgContext ctx){ if (!ctx->cmdStarted) @@ -252,14 +252,14 @@ void _flush_cmd_buff (VkvgContext ctx){ void _bind_draw_pipeline (VkvgContext ctx) { switch (ctx->curOperator) { case VKVG_OPERATOR_OVER: - vkCmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipe_OVER); + CmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipe_OVER); break; case VKVG_OPERATOR_CLEAR: vkvg_set_source_rgba(ctx,0,0,0,0); - vkCmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipe_CLEAR); + CmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipe_CLEAR); break; default: - vkCmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipe_OVER); + CmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipe_OVER); break; } } @@ -299,22 +299,22 @@ void _start_cmd_for_render_pass (VkvgContext ctx) { VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT); } - vkCmdBeginRenderPass (ctx->cmd, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); + CmdBeginRenderPass (ctx->cmd, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); VkViewport viewport = {0,0,ctx->pSurf->width,ctx->pSurf->height,0,1}; - vkCmdSetViewport(ctx->cmd, 0, 1, &viewport); + CmdSetViewport(ctx->cmd, 0, 1, &viewport); VkRect2D scissor = {{0,0},{ctx->pSurf->width,ctx->pSurf->height}}; - vkCmdSetScissor(ctx->cmd, 0, 1, &scissor); + CmdSetScissor(ctx->cmd, 0, 1, &scissor); VkDescriptorSet dss[] = {ctx->dsFont,ctx->dsSrc,ctx->dsGrad}; - vkCmdBindDescriptorSets(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineLayout, + CmdBindDescriptorSets(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineLayout, 0, 3, dss, 0, NULL); VkDeviceSize offsets[1] = { 0 }; - vkCmdBindVertexBuffers(ctx->cmd, 0, 1, &ctx->vertices.buffer, offsets); - vkCmdBindIndexBuffer(ctx->cmd, ctx->indices.buffer, 0, VK_INDEX_TYPE_UINT32); + CmdBindVertexBuffers(ctx->cmd, 0, 1, &ctx->vertices.buffer, offsets); + CmdBindIndexBuffer(ctx->cmd, ctx->indices.buffer, 0, VK_INDEX_TYPE_UINT32); _bind_draw_pipeline (ctx); - vkCmdSetStencilCompareMask(ctx->cmd, VK_STENCIL_FRONT_AND_BACK, STENCIL_CLIP_BIT); + CmdSetStencilCompareMask(ctx->cmd, VK_STENCIL_FRONT_AND_BACK, STENCIL_CLIP_BIT); _update_push_constants (ctx); ctx->cmdStarted = true; @@ -327,7 +327,7 @@ void _set_mat_inv_and_vkCmdPush (VkvgContext ctx) { ctx->pushCstDirty = true; } inline void _update_push_constants (VkvgContext ctx) { - vkCmdPushConstants(ctx->cmd, ctx->pSurf->dev->pipelineLayout, + CmdPushConstants(ctx->cmd, ctx->pSurf->dev->pipelineLayout, VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(push_constants),&ctx->pushConsts); ctx->pushCstDirty = false; } diff --git a/src/vkvg_device.c b/src/vkvg_device.c index 072d4eb..e89ab9e 100644 --- a/src/vkvg_device.c +++ b/src/vkvg_device.c @@ -25,17 +25,31 @@ #include "vkh_phyinfo.h" #include "vk_mem_alloc.h" -VkvgDevice vkvg_device_create(VkPhysicalDevice phy, VkDevice vkdev, uint32_t qFamIdx, uint32_t qIndex) +VkvgDevice vkvg_device_create(VkInstance inst, 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->instance = inst; dev->hdpi = 72; dev->vdpi = 72; dev->vkDev = vkdev; dev->phy = phy; + CmdBindPipeline = vkGetInstanceProcAddr(inst, "vkCmdBindPipeline"); + CmdBindDescriptorSets = vkGetInstanceProcAddr(inst, "vkCmdBindDescriptorSets"); + CmdBindIndexBuffer = vkGetInstanceProcAddr(inst, "vkCmdBindIndexBuffer"); + CmdBindVertexBuffers = vkGetInstanceProcAddr(inst, "vkCmdBindVertexBuffers"); + CmdDrawIndexed = vkGetInstanceProcAddr(inst, "vkCmdDrawIndexed"); + CmdDraw = vkGetInstanceProcAddr(inst, "vkCmdDraw"); + CmdSetStencilCompareMask= vkGetInstanceProcAddr(inst, "vkCmdSetStencilCompareMask"); + CmdBeginRenderPass = vkGetInstanceProcAddr(inst, "vkCmdBeginRenderPass"); + CmdEndRenderPass = vkGetInstanceProcAddr(inst, "vkCmdEndRenderPass"); + CmdSetViewport = vkGetInstanceProcAddr(inst, "vkCmdSetViewport"); + CmdSetScissor = vkGetInstanceProcAddr(inst, "vkCmdSetScissor"); + CmdPushConstants = vkGetInstanceProcAddr(inst, "vkCmdPushConstants"); + VkhPhyInfo phyInfos = vkh_phyinfo_create (dev->phy, NULL); dev->phyMemProps = phyInfos->memProps; diff --git a/src/vkvg_device_internal.h b/src/vkvg_device_internal.h index bf2fb06..ea58bf2 100644 --- a/src/vkvg_device_internal.h +++ b/src/vkvg_device_internal.h @@ -30,6 +30,23 @@ #define STENCIL_CLIP_BIT 0x2 #define STENCIL_ALL_BIT 0x3 +PFN_vkCmdBindPipeline CmdBindPipeline; +PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets; +PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer; +PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers; + +PFN_vkCmdDrawIndexed CmdDrawIndexed; +PFN_vkCmdDraw CmdDraw; + +PFN_vkCmdSetStencilCompareMask CmdSetStencilCompareMask; +PFN_vkCmdBeginRenderPass CmdBeginRenderPass; +PFN_vkCmdEndRenderPass CmdEndRenderPass; +PFN_vkCmdSetViewport CmdSetViewport; +PFN_vkCmdSetScissor CmdSetScissor; + +PFN_vkCmdPushConstants CmdPushConstants; + + typedef struct _vkvg_device_t{ VkDevice vkDev; VkPhysicalDeviceMemoryProperties phyMemProps; @@ -66,6 +83,8 @@ typedef struct _vkvg_device_t{ int hdpi, vdpi; + VkInstance instance; + _font_cache_t* fontCache; VkvgContext lastCtx; //double linked list last elmt diff --git a/src/vkvg_internal.h b/src/vkvg_internal.h index 4bd614c..ca351e3 100644 --- a/src/vkvg_internal.h +++ b/src/vkvg_internal.h @@ -28,4 +28,5 @@ #include #include #include "vectors.h" + #endif diff --git a/tests/test1.c b/tests/test1.c index 7312e18..f7db6fb 100644 --- a/tests/test1.c +++ b/tests/test1.c @@ -1117,7 +1117,7 @@ int main(int argc, char *argv[]) { VkhPresenter r = e->renderer; vkengine_set_key_callback (e, key_callback); - device = vkvg_device_create (r->dev->phy, r->dev->dev, r->qFam, 0); + device = vkvg_device_create (vkh_app_get_inst(e->app), r->dev->phy, r->dev->dev, r->qFam, 0); surf = vkvg_surface_create(device, width, height); //test_svg();