summaryrefslogtreecommitdiffstatsci
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2022-04-23 09:57:33 +0200
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>2022-04-23 09:57:33 +0200
commitf451388bac66ff7618830e27e5171d359876e943 (patch)
treebb5e93732f202807ed589d04a7aeae4ed46a9a81
parenta8049f7c6feb93fbfe32de25256283f52d0cdfdc (diff)
dev.stencilAspectFlag depending on depth or not for layout transitions
-rw-r--r--src/vkvg_context.c12
-rw-r--r--src/vkvg_context_internal.c2
-rw-r--r--src/vkvg_device.c2
-rw-r--r--src/vkvg_device_internal.c4
-rw-r--r--src/vkvg_device_internal.h3
-rw-r--r--src/vkvg_surface.c2
6 files changed, 14 insertions, 11 deletions
diff --git a/src/vkvg_context.c b/src/vkvg_context.c
index 0078598..41c22d3 100644
--- a/src/vkvg_context.c
+++ b/src/vkvg_context.c
@@ -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);
diff --git a/src/vkvg_context_internal.c b/src/vkvg_context_internal.c
index bf8078c..95f4a94 100644
--- a/src/vkvg_context_internal.c
+++ b/src/vkvg_context_internal.c
@@ -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);
}
diff --git a/src/vkvg_device.c b/src/vkvg_device.c
index adb8abe..1f1dec1 100644
--- a/src/vkvg_device.c
+++ b/src/vkvg_device.c
@@ -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
diff --git a/src/vkvg_device_internal.c b/src/vkvg_device_internal.c
index ab37f2d..828e01d 100644
--- a/src/vkvg_device_internal.c
+++ b/src/vkvg_device_internal.c
@@ -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;
}
diff --git a/src/vkvg_device_internal.h b/src/vkvg_device_internal.h
index 5503d17..992d22e 100644
--- a/src/vkvg_device_internal.h
+++ b/src/vkvg_device_internal.h
@@ -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 */
diff --git a/src/vkvg_surface.c b/src/vkvg_surface.c
index 701e9c4..b2c3cdd 100644
--- a/src/vkvg_surface.c
+++ b/src/vkvg_surface.c
@@ -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);