]> O.S.I.I.S - jp/vkvg.git/commitdiff
add sample count to device, add vkvg_device_create_multisample
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Mon, 7 Jan 2019 06:46:33 +0000 (07:46 +0100)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Mon, 7 Jan 2019 06:46:33 +0000 (07:46 +0100)
include/vkvg.h
src/vkvg_context.c
src/vkvg_device.c
src/vkvg_device_internal.c
src/vkvg_device_internal.h
src/vkvg_surface.c

index c3ea617d815c71f152c22e3c24598aae5624b719..75917699d14860d9589835846c2414a66e1ff714 100644 (file)
@@ -35,8 +35,6 @@ extern "C" {
     #define VKVG_TILING VK_IMAGE_TILING_LINEAR
 #endif
 
-#define VKVG_SAMPLES 4
-
 #define LOG_ERR                        0x00
 #define LOG_DEBUG              0x10
 #define LOG_INFO               0x20
@@ -161,8 +159,9 @@ typedef struct _vkvg_surface_t* VkvgSurface;
 typedef struct _vkvg_device_t*  VkvgDevice;
 typedef struct _vkvg_pattern_t* VkvgPattern;
 
-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_create              (VkInstance inst, VkPhysicalDevice phy, VkDevice vkdev, uint32_t qFamIdx, uint32_t qIndex);
+VkvgDevice  vkvg_device_create_multisample  (VkInstance inst, VkPhysicalDevice phy, VkDevice vkdev, uint32_t qFamIdx, uint32_t qIndex, VkSampleCountFlags samples);
+void           vkvg_device_destroy             (VkvgDevice dev);
 VkvgDevice  vkvg_device_reference           (VkvgDevice dev);
 uint32_t    vkvg_device_get_reference_count (VkvgDevice dev);
 
index 2843c05136b53b081dab45415c85a1ccd21b31b3..87989518ef4dd4ad46b4cea44681ccb60dbead94 100644 (file)
@@ -697,7 +697,7 @@ void vkvg_save (VkvgContext ctx){
     VkvgDevice dev = ctx->pSurf->dev;
     vkvg_context_save_t* sav = (vkvg_context_save_t*)calloc(1,sizeof(vkvg_context_save_t));
 
-    sav->stencilMS = vkh_image_ms_create (dev,VK_FORMAT_S8_UINT, VKVG_SAMPLES, ctx->pSurf->width, ctx->pSurf->height,
+    sav->stencilMS = vkh_image_ms_create (dev,VK_FORMAT_S8_UINT, 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);
 
index 8a3c0784cf6e048a38e44bfda2024bd5961f5970..52e057184bbac7349b5838591e73721df852858f 100644 (file)
 #include "vk_mem_alloc.h"
 
 VkvgDevice vkvg_device_create(VkInstance inst, VkPhysicalDevice phy, VkDevice vkdev, uint32_t qFamIdx, uint32_t qIndex)
+{
+    return vkvg_device_create_multisample (inst,phy,vkdev,qFamIdx,qIndex, VK_SAMPLE_COUNT_4_BIT);
+}
+VkvgDevice vkvg_device_create_multisample(VkInstance inst, VkPhysicalDevice phy, VkDevice vkdev, uint32_t qFamIdx, uint32_t qIndex, VkSampleCountFlags samples)
 {
     LOG(LOG_INFO, "CREATE Device: qFam = %d; qIdx = %d\n", qFamIdx, qIndex);
 
@@ -34,6 +38,7 @@ VkvgDevice vkvg_device_create(VkInstance inst, VkPhysicalDevice phy, VkDevice vk
     dev->instance = inst;
     dev->hdpi   = 72;
     dev->vdpi   = 72;
+    dev->samples= samples;
     dev->vkDev  = vkdev;
     dev->phy    = phy;
 
index cca37a6f9680ffc5796468199fa85c2f3dd7277e..4cf185f20c38230c180ec9b50e7827802749517f 100644 (file)
@@ -47,7 +47,7 @@ void _setupRenderPass(VkvgDevice dev)
 {
     VkAttachmentDescription attColor = {
                     .format = FB_COLOR_FORMAT,
-                    .samples = VKVG_SAMPLES,
+                    .samples = dev->samples,
                     .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
                     .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
                     .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
@@ -65,7 +65,7 @@ void _setupRenderPass(VkvgDevice dev)
                     .finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL };
     VkAttachmentDescription attDS = {
                     .format = VK_FORMAT_S8_UINT,
-                    .samples = VKVG_SAMPLES,
+                    .samples = dev->samples,
                     .loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
                     .storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
                     .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
@@ -165,7 +165,7 @@ void _setupPipelines(VkvgDevice dev)
                 .viewportCount = 1, .scissorCount = 1 };
 
     VkPipelineMultisampleStateCreateInfo multisampleState = { .sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
-                .rasterizationSamples = VKVG_SAMPLES };
+                .rasterizationSamples = dev->samples };
     /*if (VKVG_SAMPLES != VK_SAMPLE_COUNT_1_BIT){
         multisampleState.sampleShadingEnable = VK_TRUE;
         multisampleState.minSampleShading = 0.25f;
index 1f6e35d8894893a45c4d02d8e8ffef58375b44b5..b4d4fd9b5111787cfc1922108717cfbcfe181010 100644 (file)
@@ -88,7 +88,7 @@ typedef struct _vkvg_device_t{
     VkInstance              instance;
 
     VkhImage                emptyImg;//prevent unbound descriptor to trigger Validation error 61
-
+    VkSampleCountFlags      samples;//samples count for all surfaces
 
     _font_cache_t*     fontCache;
     VkvgContext     lastCtx;    //double linked list last elmt
index 694895d1d15a40ea003f92a5a3574fa5608e19ca..1e3bd4feb2ea33a87e08419f4dd36cf1a1203958 100644 (file)
@@ -77,9 +77,9 @@ void _init_surface (VkvgSurface surf) {
     surf->format = FB_COLOR_FORMAT;//force bgra internally
     surf->img = vkh_image_create(surf->dev,surf->format,surf->width,surf->height,VKVG_TILING,VMA_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);
-    surf->imgMS = vkh_image_ms_create(surf->dev,surf->format,VKVG_SAMPLES,surf->width,surf->height,VMA_MEMORY_USAGE_GPU_ONLY,
+    surf->imgMS = vkh_image_ms_create(surf->dev,surf->format,surf->dev->samples,surf->width,surf->height,VMA_MEMORY_USAGE_GPU_ONLY,
                                      VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
-    surf->stencilMS = vkh_image_ms_create(surf->dev,VK_FORMAT_S8_UINT,VKVG_SAMPLES,surf->width,surf->height,VMA_MEMORY_USAGE_GPU_ONLY,
+    surf->stencilMS = vkh_image_ms_create(surf->dev,VK_FORMAT_S8_UINT,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);
 
     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);