]> O.S.I.I.S - jp/vkvg.git/commitdiff
function pointers for most used ones
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Wed, 3 Oct 2018 10:41:37 +0000 (12:41 +0200)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Wed, 3 Oct 2018 10:41:37 +0000 (12:41 +0200)
include/vkvg.h
src/vkvg_context.c
src/vkvg_context_internal.c
src/vkvg_device.c
src/vkvg_device_internal.h
src/vkvg_internal.h
tests/test1.c

index dfba3a360567014ca88079a48856d9f3ed1def3c..4657718e4cbd41ab2fd2e668df0db49f606d1e62 100644 (file)
@@ -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);
index d041024a5c4ce33290bcd32a64bb5931b22ea825..75b0ab94d829f191b5ed912681ee84c4f7098c91 100644 (file)
@@ -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);
index c4588db6e7163ab7738e085c9e34bbea7768f03e..f80f4a9fd71a3492a97d3537d7f30d9e1568aef1 100644 (file)
@@ -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;
 }
index 072d4eb281aea1b4970d7647529b75c0bc004ae6..e89ab9e934a4628431bccea51e897485ddf90dc0 100644 (file)
 #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;
index bf2fb06e0cf1275f63a237b0a2d7d0bac78bf598..ea58bf2623093ea155790c1f8a3c511e61095b9e 100644 (file)
 #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
index 4bd614cea33232adfda614f52624c06b8beddeb5..ca351e314c1f89ad506bb050160e259c9e5661b9 100644 (file)
@@ -28,4 +28,5 @@
 #include <stdint.h>
 #include <stdbool.h>
 #include "vectors.h"
+
 #endif
index 7312e18fb2060d82df9f8a033ee45cb8390772f7..f7db6fb6007819350195a351a4e98aa87ec5f756 100644 (file)
@@ -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();