]> O.S.I.I.S - jp/vkvg.git/commitdiff
dev.stencilAspectFlag depending on depth or not for layout transitions
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Sat, 23 Apr 2022 07:57:33 +0000 (09:57 +0200)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Sat, 23 Apr 2022 07:57:33 +0000 (09:57 +0200)
src/vkvg_context.c
src/vkvg_context_internal.c
src/vkvg_device.c
src/vkvg_device_internal.c
src/vkvg_device_internal.h
src/vkvg_surface.c

index 00785981dfc865729edd158f693336a3160a6a7d..41c22d39f17bb4d59a541695c50d1ec178925b4f 100644 (file)
@@ -1316,10 +1316,10 @@ void vkvg_save (VkvgContext ctx){
                        vkh_cmd_label_start(ctx->cmd, "new save/restore stencil", DBG_LAB_COLOR_SAV);
        #endif
 
-                       vkh_image_set_layout (ctx->cmd, ctx->pSurf->stencil, VK_IMAGE_ASPECT_STENCIL_BIT,
+                       vkh_image_set_layout (ctx->cmd, ctx->pSurf->stencil, dev->stencilAspectFlag,
                                                                  VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
                                                                  VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT);
-                       vkh_image_set_layout (ctx->cmd, savStencil, VK_IMAGE_ASPECT_STENCIL_BIT,
+                       vkh_image_set_layout (ctx->cmd, savStencil, dev->stencilAspectFlag,
                                                                  VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
                                                                  VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT);
 
@@ -1331,7 +1331,7 @@ void vkvg_save (VkvgContext ctx){
                                                   vkh_image_get_vkimage (savStencil),           VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
                                                   1, &cregion);
 
-                       vkh_image_set_layout (ctx->cmd, ctx->pSurf->stencil, VK_IMAGE_ASPECT_STENCIL_BIT,
+                       vkh_image_set_layout (ctx->cmd, ctx->pSurf->stencil, dev->stencilAspectFlag,
                                                                  VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
                                                                  VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT);
 
@@ -1470,10 +1470,10 @@ void vkvg_restore (VkvgContext ctx){
                        vkh_cmd_label_start(ctx->cmd, "additional stencil copy while restoring", DBG_LAB_COLOR_SAV);
 #endif
 
-                       vkh_image_set_layout (ctx->cmd, ctx->pSurf->stencil, VK_IMAGE_ASPECT_STENCIL_BIT,
+                       vkh_image_set_layout (ctx->cmd, ctx->pSurf->stencil, ctx->dev->stencilAspectFlag,
                                                                  VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
                                                                  VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT);
-                       vkh_image_set_layout (ctx->cmd, savStencil, VK_IMAGE_ASPECT_STENCIL_BIT,
+                       vkh_image_set_layout (ctx->cmd, savStencil, ctx->dev->stencilAspectFlag,
                                                                  VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
                                                                  VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT);
 
@@ -1484,7 +1484,7 @@ void vkvg_restore (VkvgContext ctx){
                                                   vkh_image_get_vkimage (savStencil),           VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
                                                   vkh_image_get_vkimage (ctx->pSurf->stencil),VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
                                                   1, &cregion);
-                       vkh_image_set_layout (ctx->cmd, ctx->pSurf->stencil, VK_IMAGE_ASPECT_STENCIL_BIT,
+                       vkh_image_set_layout (ctx->cmd, ctx->pSurf->stencil, ctx->dev->stencilAspectFlag,
                                                                  VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
                                                                  VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT);
 
index bf8078c89c78429671c9a35aa5b2aa52f017d3aa..95f4a940b0a04edbb464a29c22bd8fcc6755aba6 100644 (file)
@@ -653,7 +653,7 @@ void _start_cmd_for_render_pass (VkvgContext ctx) {
                vkh_image_set_layout(ctx->cmd, ctx->pSurf->img, VK_IMAGE_ASPECT_COLOR_BIT,
                                                 VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
                                                 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT);
-               vkh_image_set_layout (ctx->cmd, ctx->pSurf->stencil, VK_IMAGE_ASPECT_STENCIL_BIT,
+               vkh_image_set_layout (ctx->cmd, ctx->pSurf->stencil, ctx->dev->stencilAspectFlag,
                                                          VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
                                                          VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT);
        }
index adb8abecffa67c92c56fa0be1fa01ecbada5a13d..1f1dec1293328736905379a72d6963632f420b50 100644 (file)
@@ -232,7 +232,7 @@ const void* vkvg_get_device_requirements (VkPhysicalDeviceFeatures* pEnabledFeat
 
        void* pNext = NULL;
 
-#ifdef VK_VERSION_1_2_
+#ifdef VK_VERSION_1_2
        static VkPhysicalDeviceVulkan12Features enabledFeatures12 = {
                .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES
 #ifdef VKVG_ENABLE_VK_SCALAR_BLOCK_LAYOUT
index ab37f2d1625c054f952d3f2fa260e2c95d777d7d..828e01d174a10c93d1001829bcdef5ffeddc1595 100644 (file)
@@ -517,7 +517,7 @@ void _device_create_empty_texture (VkvgDevice dev, VkFormat format, VkImageTilin
        vkh_cmd_end (dev->cmd);
        _device_submit_cmd (dev, &dev->cmd, dev->fence);
 }
-
+#define VKVG_SET_STENCIL_ASPECT dev->stencilAspectFlag = (dev->stencilFormat == VK_FORMAT_S8_UINT) ? VK_IMAGE_ASPECT_STENCIL_BIT : VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT;
 void _device_check_best_image_tiling (VkvgDevice dev, VkFormat format) {
        VkFlags stencilFormats[] = { VK_FORMAT_S8_UINT, VK_FORMAT_D16_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT };
        VkFormatProperties phyStencilProps = { 0 }, phyImgProps = { 0 };
@@ -553,6 +553,7 @@ void _device_check_best_image_tiling (VkvgDevice dev, VkFormat format) {
                        vkGetPhysicalDeviceFormatProperties(dev->phy, stencilFormats[i], &phyStencilProps);
                        if (phyStencilProps.optimalTilingFeatures & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) {
                                dev->stencilFormat = stencilFormats[i];
+                               VKVG_SET_STENCIL_ASPECT
                                dev->supportedTiling = VK_IMAGE_TILING_OPTIMAL;
                                return;
                        }
@@ -564,6 +565,7 @@ void _device_check_best_image_tiling (VkvgDevice dev, VkFormat format) {
                        vkGetPhysicalDeviceFormatProperties(dev->phy, stencilFormats[i], &phyStencilProps);
                        if (phyStencilProps.linearTilingFeatures & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) {
                                dev->stencilFormat = stencilFormats[i];
+                               VKVG_SET_STENCIL_ASPECT
                                dev->supportedTiling = VK_IMAGE_TILING_LINEAR;
                                return;
                        }
index 5503d175ee675a7ec07f5ae024be2d4008327be1..992d22e1d49fcddd574f1311fd9665822021f8f3 100644 (file)
@@ -30,7 +30,7 @@
 #define STENCIL_CLIP_BIT       0x2
 #define STENCIL_ALL_BIT                0x3
 
-#define VKVG_MAX_CACHED_CONTEXT_COUNT 36
+#define VKVG_MAX_CACHED_CONTEXT_COUNT 2
 
 extern PFN_vkCmdBindPipeline                   CmdBindPipeline;
 extern PFN_vkCmdBindDescriptorSets             CmdBindDescriptorSets;
@@ -68,6 +68,7 @@ typedef struct _vkvg_device_t {
 
        VkImageTiling                   supportedTiling;                /**< Supported image tiling for surface, 0xFF=no support */
        VkFormat                                stencilFormat;                  /**< Supported vulkan image format for stencil */
+       VkImageAspectFlags              stencilAspectFlag;              /**< stencil only or depth stencil, could be solved by VK_KHR_separate_depth_stencil_layouts*/
        VkFormat                                pngStagFormat;                  /**< Supported vulkan image format png write staging img */
        VkImageTiling                   pngStagTiling;                  /**< tiling for the blit operation */
 
index 701e9c491a4030b507f51f44ddf28967fd42c02a..b2c3cdd4764da1a723689a838199962f78ffb98f 100644 (file)
@@ -46,7 +46,7 @@ void _transition_surf_images (VkvgSurface surf) {
        vkh_image_set_layout(surf->cmd, surf->img, VK_IMAGE_ASPECT_COLOR_BIT,
                                         VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
                                         VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT);
-       vkh_image_set_layout (surf->cmd, surf->stencil, VK_IMAGE_ASPECT_STENCIL_BIT,
+       vkh_image_set_layout (surf->cmd, surf->stencil, dev->stencilAspectFlag,
                                                  VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
                                                  VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT);
        vkh_cmd_end (surf->cmd);