diff options
| author | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2022-05-28 13:04:28 +0200 |
|---|---|---|
| committer | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2022-05-28 13:04:28 +0200 |
| commit | 2b4afbd79423d83c95385da56571bc31c7ae3f39 (patch) | |
| tree | 6ffd15d14f01fc992ab52b2843b08d40b83e8885 /src | |
| parent | 7b5fc19e7cfc405606289662737594fdbba41906 (diff) | |
optional vma, vkvg is now a true c lib
Diffstat (limited to 'src')
| -rw-r--r-- | src/vkvg_buff.c | 41 | ||||
| -rw-r--r-- | src/vkvg_buff.h | 42 | ||||
| -rw-r--r-- | src/vkvg_context.c | 2 | ||||
| -rw-r--r-- | src/vkvg_context_internal.c | 50 | ||||
| -rw-r--r-- | src/vkvg_context_internal.h | 7 | ||||
| -rw-r--r-- | src/vkvg_device.c | 8 | ||||
| -rw-r--r-- | src/vkvg_device_internal.c | 2 | ||||
| -rw-r--r-- | src/vkvg_device_internal.h | 4 | ||||
| -rw-r--r-- | src/vkvg_fonts.c | 14 | ||||
| -rw-r--r-- | src/vkvg_fonts.h | 3 | ||||
| -rw-r--r-- | src/vkvg_internal.h | 1 | ||||
| -rw-r--r-- | src/vkvg_surface.c | 23 | ||||
| -rw-r--r-- | src/vkvg_surface_internal.c | 6 |
13 files changed, 60 insertions, 143 deletions
diff --git a/src/vkvg_buff.c b/src/vkvg_buff.c deleted file mode 100644 index 531dd6d..0000000 --- a/src/vkvg_buff.c +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2018-2022 Jean-Philippe Bruyère <jp_bruyere@hotmail.com> - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the - * Software, and to permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#include "vkvg_buff.h" -#include "vkvg_device_internal.h" - -void vkvg_buffer_create(VkvgDevice pDev, VkBufferUsageFlags usage, VmaMemoryUsage memoryPropertyFlags, VkDeviceSize size, vkvg_buff *buff){ - buff->pDev = pDev; - VkBufferCreateInfo bufCreateInfo = { - .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, - .usage = usage, .size = size, .sharingMode = VK_SHARING_MODE_EXCLUSIVE}; - VmaAllocationCreateInfo allocInfo = { .usage = memoryPropertyFlags, .flags = VMA_ALLOCATION_CREATE_MAPPED_BIT }; - - VK_CHECK_RESULT(vmaCreateBuffer (pDev->allocator, &bufCreateInfo, &allocInfo, &buff->buffer, &buff->alloc, &buff->allocInfo)); -} - -void vkvg_buffer_destroy(vkvg_buff *buff){ - vmaDestroyBuffer (buff->pDev->allocator, buff->buffer, buff->alloc); -} -void vkvg_buffer_flush (vkvg_buff* buff){ - vmaFlushAllocation (buff->pDev->allocator, buff->alloc, buff->allocInfo.offset, buff->allocInfo.size); -} diff --git a/src/vkvg_buff.h b/src/vkvg_buff.h deleted file mode 100644 index 2917832..0000000 --- a/src/vkvg_buff.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2018-2022 Jean-Philippe Bruyère <jp_bruyere@hotmail.com> - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the - * Software, and to permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#ifndef VKVG_BUFF_H -#define VKVG_BUFF_H - -#include <vulkan/vulkan.h> -#include "vkvg.h" -#include "vk_mem_alloc.h" - -typedef struct vkvg_buff_t { - VkvgDevice pDev; - VkBuffer buffer; - VmaAllocation alloc; - VmaAllocationInfo allocInfo; - VkDescriptorBufferInfo descriptor; -}vkvg_buff; - -void vkvg_buffer_create (VkvgDevice pDev, VkBufferUsageFlags usage, - VmaMemoryUsage memoryPropertyFlags, VkDeviceSize size, vkvg_buff *buff); -void vkvg_buffer_destroy (vkvg_buff* buff); - -void vkvg_buffer_flush (vkvg_buff* buff); -#endif diff --git a/src/vkvg_context.c b/src/vkvg_context.c index 41c22d3..895c546 100644 --- a/src/vkvg_context.c +++ b/src/vkvg_context.c @@ -1306,7 +1306,7 @@ void vkvg_save (VkvgContext ctx){ } ctx->savedStencils = savedStencilsPtr; VkhImage savStencil = vkh_image_ms_create ((VkhDevice)dev, dev->stencilFormat, dev->samples, ctx->pSurf->width, ctx->pSurf->height, - VMA_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT); + VKH_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT); ctx->savedStencils[curSaveStencil-1] = savStencil; vkh_cmd_begin (ctx->cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); diff --git a/src/vkvg_context_internal.c b/src/vkvg_context_internal.c index c6a7244..42ad96d 100644 --- a/src/vkvg_context_internal.c +++ b/src/vkvg_context_internal.c @@ -255,20 +255,20 @@ float _get_arc_step (VkvgContext ctx, float radius) { return fminf(M_PIF / 3.f,M_PIF / (r * 0.4f)); } void _create_gradient_buff (VkvgContext ctx){ - vkvg_buffer_create (ctx->dev, + vkh_buffer_init ((VkhDevice)ctx->dev, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, - VMA_MEMORY_USAGE_CPU_TO_GPU, - sizeof(vkvg_gradient_t), &ctx->uboGrad); + VKH_MEMORY_USAGE_CPU_TO_GPU, + sizeof(vkvg_gradient_t), &ctx->uboGrad, true); } void _create_vertices_buff (VkvgContext ctx){ - vkvg_buffer_create (ctx->dev, + vkh_buffer_init ((VkhDevice)ctx->dev, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, - VMA_MEMORY_USAGE_CPU_TO_GPU, - ctx->sizeVBO * sizeof(Vertex), &ctx->vertices); - vkvg_buffer_create (ctx->dev, + VKH_MEMORY_USAGE_CPU_TO_GPU, + ctx->sizeVBO * sizeof(Vertex), &ctx->vertices, true); + vkh_buffer_init ((VkhDevice)ctx->dev, VK_BUFFER_USAGE_INDEX_BUFFER_BIT, - VMA_MEMORY_USAGE_CPU_TO_GPU, - ctx->sizeIBO * sizeof(VKVG_IBO_INDEX_TYPE), &ctx->indices); + VKH_MEMORY_USAGE_CPU_TO_GPU, + ctx->sizeIBO * sizeof(VKVG_IBO_INDEX_TYPE), &ctx->indices, true); } void _resize_vbo (VkvgContext ctx, uint32_t new_size) { if (!_wait_ctx_flush_end (ctx))//wait previous cmd if not completed @@ -279,11 +279,7 @@ void _resize_vbo (VkvgContext ctx, uint32_t new_size) { if (mod > 0) ctx->sizeVBO += VKVG_VBO_SIZE - mod; LOG(VKVG_LOG_DBG_ARRAYS, "%d\n", ctx->sizeVBO); - vkvg_buffer_destroy (&ctx->vertices); - vkvg_buffer_create (ctx->dev, - VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, - VMA_MEMORY_USAGE_CPU_TO_GPU, - ctx->sizeVBO * sizeof(Vertex), &ctx->vertices); + vkh_buffer_resize (&ctx->vertices, ctx->sizeVBO * sizeof(Vertex), true); } void _resize_ibo (VkvgContext ctx, size_t new_size) { if (!_wait_ctx_flush_end (ctx))//wait previous cmd if not completed @@ -292,12 +288,8 @@ void _resize_ibo (VkvgContext ctx, size_t new_size) { uint32_t mod = ctx->sizeIBO % VKVG_IBO_SIZE; if (mod > 0) ctx->sizeIBO += VKVG_IBO_SIZE - mod; - LOG(VKVG_LOG_DBG_ARRAYS, "resize IBO: new size: %d\n", ctx->sizeIBO); - vkvg_buffer_destroy (&ctx->indices); - vkvg_buffer_create (ctx->dev, - VK_BUFFER_USAGE_INDEX_BUFFER_BIT, - VMA_MEMORY_USAGE_CPU_TO_GPU, - ctx->sizeIBO * sizeof(VKVG_IBO_INDEX_TYPE), &ctx->indices); + LOG(VKVG_LOG_DBG_ARRAYS, "resize IBO: new size: %d\n", ctx->sizeIBO); + vkh_buffer_resize (&ctx->indices, ctx->sizeIBO * sizeof(VKVG_IBO_INDEX_TYPE), true); } void _add_vertexf (VkvgContext ctx, float x, float y){ Vertex* pVert = &ctx->vertexCache[ctx->vertCount]; @@ -517,8 +509,8 @@ bool _wait_and_submit_cmd (VkvgContext ctx){ void _flush_vertices_caches_until_vertex_base (VkvgContext ctx) { _wait_ctx_flush_end (ctx); - memcpy(ctx->vertices.allocInfo.pMappedData, ctx->vertexCache, ctx->curVertOffset * sizeof (Vertex)); - memcpy(ctx->indices.allocInfo.pMappedData, ctx->indexCache, ctx->curIndStart * sizeof (VKVG_IBO_INDEX_TYPE)); + memcpy(vkh_buffer_get_mapped_pointer(&ctx->vertices), ctx->vertexCache, ctx->curVertOffset * sizeof (Vertex)); + memcpy(vkh_buffer_get_mapped_pointer(&ctx->indices), ctx->indexCache, ctx->curIndStart * sizeof (VKVG_IBO_INDEX_TYPE)); //copy remaining vertices and indices to caches starts //this could be optimized at the cost of additional offsets. @@ -536,8 +528,8 @@ void _flush_vertices_caches (VkvgContext ctx) { if (!_wait_ctx_flush_end (ctx)) return; - memcpy(ctx->vertices.allocInfo.pMappedData, ctx->vertexCache, ctx->vertCount * sizeof (Vertex)); - memcpy(ctx->indices.allocInfo.pMappedData, ctx->indexCache, ctx->indCount * sizeof (VKVG_IBO_INDEX_TYPE)); + memcpy(vkh_buffer_get_mapped_pointer(&ctx->vertices), ctx->vertexCache, ctx->vertCount * sizeof (Vertex)); + memcpy(vkh_buffer_get_mapped_pointer(&ctx->indices), ctx->indexCache, ctx->indCount * sizeof (VKVG_IBO_INDEX_TYPE)); ctx->vertCount = ctx->indCount = ctx->curIndStart = ctx->curVertOffset = 0; } @@ -828,8 +820,8 @@ void _update_cur_pattern (VkvgContext ctx, VkvgPattern pat) { vkvg_matrix_transform_distance (&ctx->pushConsts.mat, &grad.cp[1].z, &grad.cp[0].w); } - memcpy (ctx->uboGrad.allocInfo.pMappedData , &grad, sizeof(vkvg_gradient_t)); - vkvg_buffer_flush(&ctx->uboGrad); + memcpy (vkh_buffer_get_mapped_pointer(&ctx->uboGrad) , &grad, sizeof(vkvg_gradient_t)); + vkh_buffer_flush(&ctx->uboGrad); break; } ctx->pushConsts.fsq_patternType = (ctx->pushConsts.fsq_patternType & FULLSCREEN_BIT) + newPatternType; @@ -918,9 +910,9 @@ void _release_context_ressources (VkvgContext ctx) { vkDestroyDescriptorPool (dev, ctx->descriptorPool,NULL); - vkvg_buffer_destroy (&ctx->uboGrad); - vkvg_buffer_destroy (&ctx->indices); - vkvg_buffer_destroy (&ctx->vertices); + vkh_buffer_reset (&ctx->uboGrad); + vkh_buffer_reset (&ctx->indices); + vkh_buffer_reset (&ctx->vertices); free(ctx->vertexCache); free(ctx->indexCache); diff --git a/src/vkvg_context_internal.h b/src/vkvg_context_internal.h index cff7889..63bd40a 100644 --- a/src/vkvg_context_internal.h +++ b/src/vkvg_context_internal.h @@ -24,7 +24,6 @@ #include "vkvg_internal.h" #include "vkvg.h" -#include "vkvg_buff.h" #include "vkh.h" #include "vkvg_fonts.h" @@ -165,10 +164,10 @@ typedef struct _vkvg_context_t { vkvg_recording_t* recording; #endif - vkvg_buff uboGrad; //uniform buff obj holdings gradient infos + vkh_buffer_t uboGrad; //uniform buff obj holdings gradient infos //vk buffers, holds data until flush - vkvg_buff indices; //index buffer with persistent map memory + vkh_buffer_t indices; //index buffer with persistent map memory uint32_t sizeIBO; //size of vk ibo uint32_t sizeIndices; //reserved size uint32_t indCount; //current indice count @@ -176,7 +175,7 @@ typedef struct _vkvg_context_t { uint32_t curIndStart; //last index recorded in cmd buff VKVG_IBO_INDEX_TYPE curVertOffset; //vertex offset in draw indexed command - vkvg_buff vertices; //vertex buffer with persistent mapped memory + vkh_buffer_t vertices; //vertex buffer with persistent mapped memory uint32_t sizeVBO; //size of vk vbo size uint32_t sizeVertices; //reserved size uint32_t vertCount; //effective vertices count diff --git a/src/vkvg_device.c b/src/vkvg_device.c index 1f1dec1..0fcb6bb 100644 --- a/src/vkvg_device.c +++ b/src/vkvg_device.c @@ -48,6 +48,8 @@ void vkvg_device_set_context_cache_size (VkvgDevice dev, uint32_t maxCount) { dev->cachedContextLast = cur; } void _device_init (VkvgDevice dev, VkInstance inst, VkPhysicalDevice phy, VkDevice vkdev, uint32_t qFamIdx, uint32_t qIndex, VkSampleCountFlags samples, bool deferredResolve) { + dev->vkDev = vkdev; + dev->phy = phy; dev->instance = inst; dev->hdpi = 72; dev->vdpi = 72; @@ -56,8 +58,6 @@ void _device_init (VkvgDevice dev, VkInstance inst, VkPhysicalDevice phy, VkDevi dev->deferredResolve = false; else dev->deferredResolve = deferredResolve; - dev->vkDev = vkdev; - dev->phy = phy; dev->cachedContextMaxCount = VKVG_MAX_CACHED_CONTEXT_COUNT; @@ -84,11 +84,13 @@ void _device_init (VkvgDevice dev, VkInstance inst, VkPhysicalDevice phy, VkDevi vkh_phyinfo_destroy (phyInfos); +#ifdef VKH_USE_VMA VmaAllocatorCreateInfo allocatorInfo = { .physicalDevice = phy, .device = vkdev }; vmaCreateAllocator(&allocatorInfo, &dev->allocator); +#endif dev->cmdPool= vkh_cmd_pool_create ((VkhDevice)dev, dev->gQueue->familyIndex, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT); dev->cmd = vkh_cmd_buff_create ((VkhDevice)dev, dev->cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY); @@ -449,7 +451,9 @@ void vkvg_device_destroy (VkvgDevice dev) _font_cache_destroy(dev); +#ifdef VKH_USE_VMA vmaDestroyAllocator (dev->allocator); +#endif if (dev->threadAware) mtx_destroy (&dev->mutex); diff --git a/src/vkvg_device_internal.c b/src/vkvg_device_internal.c index ef045f1..f9f865c 100644 --- a/src/vkvg_device_internal.c +++ b/src/vkvg_device_internal.c @@ -504,7 +504,7 @@ bool _device_init_function_pointers (VkvgDevice dev) { void _device_create_empty_texture (VkvgDevice dev, VkFormat format, VkImageTiling tiling) { //create empty image to bind to context source descriptor when not in use - dev->emptyImg = vkh_image_create((VkhDevice)dev,format,16,16,tiling,VMA_MEMORY_USAGE_GPU_ONLY, + dev->emptyImg = vkh_image_create((VkhDevice)dev,format,16,16,tiling,VKH_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_SAMPLED_BIT|VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); vkh_image_create_descriptor(dev->emptyImg, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, VK_FILTER_NEAREST, VK_FILTER_NEAREST, VK_SAMPLER_MIPMAP_MODE_NEAREST,VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE); diff --git a/src/vkvg_device_internal.h b/src/vkvg_device_internal.h index 992d22e..9ba9355 100644 --- a/src/vkvg_device_internal.h +++ b/src/vkvg_device_internal.h @@ -63,8 +63,10 @@ typedef struct _vkvg_device_t { VkDevice vkDev; /**< Vulkan Logical Device */ VkPhysicalDeviceMemoryProperties phyMemProps; /**< Vulkan Physical device memory properties */ VkPhysicalDevice phy; /**< Vulkan Physical device */ - VmaAllocator allocator; /**< Vulkan Memory allocator */ VkInstance instance; /**< Vulkan instance */ +#ifdef VKH_USE_VMA + void* allocator; /**< Vulkan Memory allocator */ +#endif VkImageTiling supportedTiling; /**< Supported image tiling for surface, 0xFF=no support */ VkFormat stencilFormat; /**< Supported vulkan image format for stencil */ diff --git a/src/vkvg_fonts.c b/src/vkvg_fonts.c index 830d9f3..9c5f2c6 100644 --- a/src/vkvg_fonts.c +++ b/src/vkvg_fonts.c @@ -68,7 +68,7 @@ void _fonts_cache_create (VkvgDevice dev){ cache->texLength = FONT_CACHE_INIT_LAYERS; cache->texture = vkh_tex2d_array_create ((VkhDevice)dev, cache->texFormat, FONT_PAGE_SIZE, FONT_PAGE_SIZE, - cache->texLength ,VMA_MEMORY_USAGE_GPU_ONLY, + cache->texLength ,VKH_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_SAMPLED_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_TRANSFER_SRC_BIT); vkh_image_create_descriptor (cache->texture, VK_IMAGE_VIEW_TYPE_2D_ARRAY, VK_IMAGE_ASPECT_COLOR_BIT, VK_FILTER_NEAREST, VK_FILTER_NEAREST, VK_SAMPLER_MIPMAP_MODE_NEAREST, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER); @@ -77,10 +77,10 @@ void _fonts_cache_create (VkvgDevice dev){ uint32_t buffLength = FONT_PAGE_SIZE*FONT_PAGE_SIZE*cache->texPixelSize; - vkvg_buffer_create (dev, + vkh_buffer_init ((VkhDevice)dev, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, - VMA_MEMORY_USAGE_CPU_TO_GPU, - buffLength, &cache->buff); + VKH_MEMORY_USAGE_CPU_TO_GPU, + buffLength, &cache->buff, true); cache->cmd = vkh_cmd_buff_create((VkhDevice)dev,dev->cmdPool,VK_COMMAND_BUFFER_LEVEL_PRIMARY); @@ -111,7 +111,7 @@ void _increase_font_tex_array (VkvgDevice dev){ uint8_t newSize = cache->texLength + FONT_CACHE_INIT_LAYERS; VkhImage newImg = vkh_tex2d_array_create ((VkhDevice)dev, cache->texFormat, FONT_PAGE_SIZE, FONT_PAGE_SIZE, - newSize ,VMA_MEMORY_USAGE_GPU_ONLY, + newSize ,VKH_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_SAMPLED_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_TRANSFER_SRC_BIT); vkh_image_create_descriptor (newImg, VK_IMAGE_VIEW_TYPE_2D_ARRAY, VK_IMAGE_ASPECT_COLOR_BIT, VK_FILTER_NEAREST, VK_FILTER_NEAREST, VK_SAMPLER_MIPMAP_MODE_NEAREST,VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER); @@ -171,7 +171,7 @@ void _flush_chars_to_tex (VkvgDevice dev, _vkvg_font_t* f) { vkResetCommandBuffer(cache->cmd,0); - memcpy(cache->buff.allocInfo.pMappedData, cache->hostBuff, (uint64_t)f->curLine.height * FONT_PAGE_SIZE * cache->texPixelSize); + memcpy(vkh_buffer_get_mapped_pointer (&cache->buff), cache->hostBuff, (uint64_t)f->curLine.height * FONT_PAGE_SIZE * cache->texPixelSize); vkh_cmd_begin (cache->cmd,VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); @@ -258,7 +258,7 @@ void _font_cache_destroy (VkvgDevice dev){ free(cache->fonts); free(cache->pensY); - vkvg_buffer_destroy (&cache->buff); + vkh_buffer_reset (&cache->buff); vkh_image_destroy (cache->texture); //vkFreeCommandBuffers(dev->vkDev,dev->cmdPool, 1, &cache->cmd); vkDestroyFence (dev->vkDev,cache->uploadFence,NULL); diff --git a/src/vkvg_fonts.h b/src/vkvg_fonts.h index 72710d5..959c5c8 100644 --- a/src/vkvg_fonts.h +++ b/src/vkvg_fonts.h @@ -60,6 +60,7 @@ #define FONT_NAME_MAX_SIZE 128 #include "vkvg_internal.h" +#include "vkh_buffer.h" //texture coordinates of one character in font cache array texture. typedef struct { @@ -134,7 +135,7 @@ typedef struct { uint8_t* hostBuff; /* host memory where bitmaps are first loaded */ VkCommandBuffer cmd; /* vulkan command buffer for font textures upload */ - vkvg_buff buff; /* stagin buffer */ + vkh_buffer_t buff; /* stagin buffer */ VkhImage texture; /* 2d array texture used by contexts to draw characteres */ VkFormat texFormat; /* Format of the fonts texture array */ uint8_t texPixelSize; /* Size in byte of a single pixel in a font texture */ diff --git a/src/vkvg_internal.h b/src/vkvg_internal.h index f1805ec..535ca81 100644 --- a/src/vkvg_internal.h +++ b/src/vkvg_internal.h @@ -87,7 +87,6 @@ //#define VKVG_FENCE_TIMEOUT 10000 #include "vkvg.h" -#include "vkvg_buff.h" #include "vkh.h" #include "vectors.h" diff --git a/src/vkvg_surface.c b/src/vkvg_surface.c index b2c3cdd..369adbd 100644 --- a/src/vkvg_surface.c +++ b/src/vkvg_surface.c @@ -125,19 +125,22 @@ VkvgSurface vkvg_surface_create_from_bitmap (VkvgDevice dev, unsigned char* img, VkImageSubresourceLayers imgSubResLayers = {VK_IMAGE_ASPECT_COLOR_BIT,0,0,1}; //original format image VkhImage stagImg= vkh_image_create ((VkhDevice)surf->dev,VK_FORMAT_R8G8B8A8_UNORM,surf->width,surf->height,VK_IMAGE_TILING_LINEAR, - VMA_MEMORY_USAGE_GPU_ONLY, + VKH_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT); //bgra bliting target VkhImage tmpImg = vkh_image_create ((VkhDevice)surf->dev,surf->format,surf->width,surf->height,VK_IMAGE_TILING_LINEAR, - VMA_MEMORY_USAGE_GPU_ONLY, + VKH_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_SAMPLED_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT); vkh_image_create_descriptor (tmpImg, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, VK_FILTER_NEAREST, VK_FILTER_NEAREST, VK_SAMPLER_MIPMAP_MODE_NEAREST, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER); //staging buffer - vkvg_buff buff = {0}; - vkvg_buffer_create(dev, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_MEMORY_USAGE_CPU_TO_GPU, imgSize, &buff); + vkh_buffer_t buff = {0}; + vkh_buffer_init((VkhDevice)dev, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + VKH_MEMORY_USAGE_CPU_TO_GPU, + imgSize, &buff, true); - memcpy (buff.allocInfo.pMappedData, img, imgSize); + memcpy (vkh_buffer_get_mapped_pointer (&buff), img, imgSize); VkCommandBuffer cmd = surf->cmd; @@ -178,7 +181,7 @@ VkvgSurface vkvg_surface_create_from_bitmap (VkvgDevice dev, unsigned char* img, _surface_submit_cmd (surf);//lock surface? - vkvg_buffer_destroy (&buff); + vkh_buffer_reset (&buff); vkh_image_destroy (stagImg); surf->newSurf = false; @@ -329,11 +332,11 @@ vkvg_status_t vkvg_surface_write_to_png (VkvgSurface surf, const char* path){ if (dev->pngStagTiling == VK_IMAGE_TILING_LINEAR) stagImg = vkh_image_create ((VkhDevice)surf->dev, dev->pngStagFormat, surf->width, surf->height, dev->pngStagTiling, - VMA_MEMORY_USAGE_GPU_TO_CPU, + VKH_MEMORY_USAGE_GPU_TO_CPU, VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT); else stagImg = vkh_image_create ((VkhDevice)surf->dev, dev->pngStagFormat, surf->width,surf->height, dev->pngStagTiling, - VMA_MEMORY_USAGE_GPU_ONLY, + VKH_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT); VkCommandBuffer cmd = surf->cmd; @@ -363,7 +366,7 @@ vkvg_status_t vkvg_surface_write_to_png (VkvgSurface surf, const char* path){ if (dev->pngStagTiling == VK_IMAGE_TILING_OPTIMAL) { stagImgLinear = vkh_image_create ((VkhDevice)surf->dev, dev->pngStagFormat, surf->width, surf->height, VK_IMAGE_TILING_LINEAR, - VMA_MEMORY_USAGE_GPU_TO_CPU, + VKH_MEMORY_USAGE_GPU_TO_CPU, VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT); VkImageCopy cpy = { .srcSubresource = imgSubResLayers, @@ -421,7 +424,7 @@ vkvg_status_t vkvg_surface_write_to_memory (VkvgSurface surf, unsigned char* con //RGBA to blit to, surf img is bgra VkhImage stagImg= vkh_image_create ((VkhDevice)surf->dev,VK_FORMAT_B8G8R8A8_UNORM ,surf->width,surf->height,VK_IMAGE_TILING_LINEAR, - VMA_MEMORY_USAGE_GPU_TO_CPU, + VKH_MEMORY_USAGE_GPU_TO_CPU, VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT); VkCommandBuffer cmd = surf->cmd; diff --git a/src/vkvg_surface_internal.c b/src/vkvg_surface_internal.c index 263489b..5775a08 100644 --- a/src/vkvg_surface_internal.c +++ b/src/vkvg_surface_internal.c @@ -108,7 +108,7 @@ void _clear_surface (VkvgSurface surf, VkImageAspectFlags aspect) } void _create_surface_main_image (VkvgSurface surf){ - surf->img = vkh_image_create((VkhDevice)surf->dev,surf->format,surf->width,surf->height,surf->dev->supportedTiling,VMA_MEMORY_USAGE_GPU_ONLY, + surf->img = vkh_image_create((VkhDevice)surf->dev,surf->format,surf->width,surf->height,surf->dev->supportedTiling,VKH_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); vkh_image_create_descriptor(surf->img, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, VK_FILTER_NEAREST, VK_FILTER_NEAREST, VK_SAMPLER_MIPMAP_MODE_NEAREST,VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE); #if defined(DEBUG) && defined (VKVG_DBG_UTILS) @@ -120,7 +120,7 @@ void _create_surface_main_image (VkvgSurface surf){ //create multisample color img if sample count > 1 and the stencil buffer multisampled or not void _create_surface_secondary_images (VkvgSurface surf) { if (surf->dev->samples > VK_SAMPLE_COUNT_1_BIT){ - surf->imgMS = vkh_image_ms_create((VkhDevice)surf->dev,surf->format,surf->dev->samples,surf->width,surf->height,VMA_MEMORY_USAGE_GPU_ONLY, + surf->imgMS = vkh_image_ms_create((VkhDevice)surf->dev,surf->format,surf->dev->samples,surf->width,surf->height,VKH_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_TRANSFER_SRC_BIT); vkh_image_create_descriptor(surf->imgMS, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, VK_FILTER_NEAREST, VK_FILTER_NEAREST, VK_SAMPLER_MIPMAP_MODE_NEAREST,VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE); @@ -130,7 +130,7 @@ void _create_surface_secondary_images (VkvgSurface surf) { vkh_device_set_object_name((VkhDevice)surf->dev, VK_OBJECT_TYPE_SAMPLER, (uint64_t)vkh_image_get_sampler(surf->imgMS), "SURF MS color SAMPLER"); #endif } - surf->stencil = vkh_image_ms_create((VkhDevice)surf->dev,surf->dev->stencilFormat,surf->dev->samples,surf->width,surf->height,VMA_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_TRANSFER_SRC_BIT); + surf->stencil = vkh_image_ms_create((VkhDevice)surf->dev,surf->dev->stencilFormat,surf->dev->samples,surf->width,surf->height,VKH_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_TRANSFER_SRC_BIT); vkh_image_create_descriptor(surf->stencil, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_STENCIL_BIT, VK_FILTER_NEAREST, VK_FILTER_NEAREST, VK_SAMPLER_MIPMAP_MODE_NEAREST,VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE); #if defined(DEBUG) && defined (VKVG_DBG_UTILS) |