ENDIF()
MESSAGE(STATUS "${CMAKE_BUILD_TYPE} build.")
+add_subdirectory (vkh)
+
FIND_PACKAGE(Vulkan REQUIRED)
FIND_PACKAGE(GLFW3 REQUIRED)
FIND_PACKAGE(Freetype REQUIRED)
SET_SOURCE_FILES_PROPERTIES(${SHADERS_H} PROPERTIES GENERATED 1)
#add_definitions( -DDEBUG_VK_PERF=true )
-FILE(GLOB VKVG_SRC src/*.c vkh/*.c)
+FILE(GLOB VKVG_SRC src/*.c)
ADD_LIBRARY(${PROJECT_NAME} SHARED ${VKVG_SRC} ${SHADERS})
#add_dependencies(BuildShaderHeader CompileShaders)
SET_TARGET_PROPERTIES(vkvg PROPERTIES
- VERSION ${PROJECT_VERSION}
- SOVERSION 1
- PUBLIC_HEADER include/vkvg.h
+ VERSION ${PROJECT_VERSION}
+ SOVERSION 1
+ PUBLIC_HEADER include/vkvg.h
)
TARGET_INCLUDE_DIRECTORIES(vkvg PRIVATE
- ${CMAKE_CURRENT_SOURCE_DIR}/include
- ${CMAKE_CURRENT_SOURCE_DIR}/vkh
- ${CMAKE_CURRENT_SOURCE_DIR}/src
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ ${CMAKE_CURRENT_SOURCE_DIR}/vkh/include
${FREETYPE_INCLUDE_DIRS}
${HARFBUZZ_INCLUDE_DIRS}
${FONTCONFIG_INCLUDE_DIR}
vkh_image_create_sampler(ctx->source,VK_FILTER_NEAREST, VK_FILTER_NEAREST,
VK_SAMPLER_MIPMAP_MODE_NEAREST,VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER);
- if (ctx->source->layout != VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL){
+ if (vkh_image_get_layout (ctx->source) != VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL){
vkh_cmd_begin (ctx->cmd,VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
vkh_image_set_layout (ctx->cmd, ctx->source, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
.dstSubresource = {VK_IMAGE_ASPECT_STENCIL_BIT, 0, 0, 1},
.extent = {ctx->pSurf->width,ctx->pSurf->height,1}};
vkCmdCopyImage(ctx->cmd,
- ctx->pSurf->stencilMS->image,VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
- sav->stencilMS->image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+ vkh_image_get_vkimage (ctx->pSurf->stencilMS),VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+ vkh_image_get_vkimage (sav->stencilMS), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
1, &cregion);
vkh_image_set_layout (ctx->cmd, ctx->pSurf->stencilMS, VK_IMAGE_ASPECT_STENCIL_BIT, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
.dstSubresource = {VK_IMAGE_ASPECT_STENCIL_BIT, 0, 0, 1},
.extent = {ctx->pSurf->width,ctx->pSurf->height,1}};
vkCmdCopyImage(ctx->cmd,
- sav->stencilMS->image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
- ctx->pSurf->stencilMS->image,VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+ vkh_image_get_vkimage (sav->stencilMS), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+ vkh_image_get_vkimage (ctx->pSurf->stencilMS),VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
1, &cregion);
vkh_image_set_layout (ctx->cmd, ctx->pSurf->stencilMS, VK_IMAGE_ASPECT_STENCIL_BIT, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT);
};
vkCmdResolveImage(ctx->cmd,
- ctx->pSurf->imgMS->image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
- ctx->pSurf->img->image ,VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+ vkh_image_get_vkimage (ctx->pSurf->imgMS), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+ vkh_image_get_vkimage (ctx->pSurf->img) ,VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
1,&re);
vkh_image_set_layout (ctx->cmd, ctx->pSurf->imgMS, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL ,
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT);
}
void _update_source_descriptor_set (VkvgContext ctx){
VkvgDevice dev = ctx->pSurf->dev;
- VkDescriptorImageInfo descSrcTex = { .imageView = ctx->source->view,
- .imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
- .sampler = ctx->source->sampler };
-
+ VkDescriptorImageInfo descSrcTex = vkh_image_get_descriptor (ctx->source, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
VkWriteDescriptorSet writeDescriptorSet = {
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
.dstSet = ctx->dsSrc,
void _update_font_descriptor_set (VkvgContext ctx){
VkvgDevice dev = ctx->pSurf->dev;
_font_cache_t* cache = dev->fontCache;
- VkDescriptorImageInfo descFontTex = { .imageView = cache->cacheTex->view,
- .imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
- .sampler = cache->cacheTex->sampler };
-
+ VkDescriptorImageInfo descFontTex = vkh_image_get_descriptor (cache->cacheTex, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
VkWriteDescriptorSet writeDescriptorSet = {
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
.dstSet = ctx->dsFont,
#include "vkvg_internal.h"
#include "vkvg.h"
#include "vkvg_buff.h"
-#include "vkh_image.h"
+#include "vkh.h"
#include "vkvg_fonts.h"
#define VKVG_PTS_SIZE 4096
#include "vkvg_surface_internal.h"
#include "vkvg_device_internal.h"
-#include "vkh_buffer.h"
+#include "vkh.h"
int defaultFontCharSize = 12<<6;
.dstSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, cache->cacheTexLength},
.extent = {FONT_PAGE_SIZE,FONT_PAGE_SIZE,1}};
- vkCmdCopyImage (cache->cmd, cache->cacheTex->image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
- newImg->image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &cregion);
+ vkCmdCopyImage (cache->cmd, vkh_image_get_vkimage (cache->cacheTex), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+ vkh_image_get_vkimage (newImg), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &cregion);
vkh_image_set_layout_subres(cache->cmd, newImg, subresNew, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT);
vkResetCommandBuffer(cache->cmd,NULL);
vkResetFences (dev->vkDev,1,&cache->uploadFence);
- memcpy(cache->buff->mapped, cache->hostBuff, f->curLine.height * FONT_PAGE_SIZE);
+ memcpy(vkh_buffer_get_mapped_pointer (cache->buff), cache->hostBuff, f->curLine.height * FONT_PAGE_SIZE);
vkh_cmd_begin (cache->cmd,VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
.imageOffset = {f->curLine.penX,f->curLine.penY,0},
.imageExtent = {FONT_PAGE_SIZE-f->curLine.penX,f->curLine.height,1}};
- vkCmdCopyBufferToImage(cache->cmd, cache->buff->buffer, cache->cacheTex->image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &bufferCopyRegion);
+ vkCmdCopyBufferToImage(cache->cmd, vkh_buffer_get_vkbuffer (cache->buff),
+ vkh_image_get_vkimage (cache->cacheTex), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &bufferCopyRegion);
vkh_image_set_layout_subres(cache->cmd, cache->cacheTex, subres, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT);
#include "vkvg_internal.h"
#include "vkvg.h"
-#include "vkh_image.h"
+#include "vkh.h"
+//#include "vkh_image.h"
///texture coords of one char
void _update_descSet (VkvgPattern pat){
_font_cache_t* cache = pat->dev->fontCache;
- VkDescriptorImageInfo descFontTex = {cache->cacheTex->sampler, cache->cacheTex->view,VK_IMAGE_LAYOUT_GENERAL};
- VkDescriptorImageInfo descSrcTex = {pat->img->sampler, pat->img->view, VK_IMAGE_LAYOUT_GENERAL};
+ VkDescriptorImageInfo descFontTex = vkh_image_get_descriptor (cache->cacheTex,VK_IMAGE_LAYOUT_GENERAL);
+ VkDescriptorImageInfo descSrcTex = vkh_image_get_descriptor (pat->img, VK_IMAGE_LAYOUT_GENERAL);
VkWriteDescriptorSet writeDescriptorSet[] = {
{
#include "vkvg_internal.h"
#include "vkvg.h"
-#include "vkhelpers.h"
+#include "vkh.h"
typedef enum _vkvg_extend {
- VKVG_EXTEND_NONE,
- VKVG_EXTEND_REPEAT,
- VKVG_EXTEND_REFLECT,
- VKVG_EXTEND_PAD
+ VKVG_EXTEND_NONE,
+ VKVG_EXTEND_REPEAT,
+ VKVG_EXTEND_REFLECT,
+ VKVG_EXTEND_PAD
} vkvg_extend_t;
typedef struct _vkvg_pattern_t {
- VkvgDevice dev;
- VkDescriptorSet descriptorSet;
- vkvg_extend_t extend;
- VkhImage img;
+ VkvgDevice dev;
+ VkDescriptorSet descriptorSet;
+ vkvg_extend_t extend;
+ VkhImage img;
}vkvg_pattern;
#endif
vkh_image_set_layout (cmd, surf->stencilMS, VK_IMAGE_ASPECT_STENCIL_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT);
- vkCmdClearDepthStencilImage (cmd, surf->stencilMS->image,
+ vkCmdClearDepthStencilImage (cmd, vkh_image_get_vkimage (surf->stencilMS),
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,&clr,1,&range);
vkh_image_set_layout (cmd, surf->stencilMS, VK_IMAGE_ASPECT_STENCIL_BIT, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
vkh_image_create_descriptor(surf->stencilMS, 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_BORDER);
VkImageView attachments[] = {
- surf->imgMS->view, surf->img->view,
- surf->stencilMS->view,
+ vkh_image_get_view (surf->imgMS),
+ vkh_image_get_view (surf->img),
+ vkh_image_get_view (surf->stencilMS),
};
VkFramebufferCreateInfo frameBufferCreateInfo = { .sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
.renderPass = dev->renderPass,
VkImage vkvg_surface_get_vk_image(VkvgSurface surf)
{
- return surf->img->image;
+ return vkh_image_get_vkimage (surf->img);
}
VkImage vkvg_surface_get_vkh_image(VkvgSurface surf)
{
#include "vkvg_internal.h"
#include "vkvg.h"
-#include "vkh_image.h"
+#include "vkh.h"
typedef struct _vkvg_surface_t {
VkvgDevice dev;
-Subproject commit 5a27d2a48747db16eb098718dbe1396d0d291e19
+Subproject commit a9a9ac94d2a52465005278f4354b53559d216df4