processing that sucks less?

I gave this another try, but still with no luck :frowning:
I pulled the latest changes from github, now vkdt complains with the example config files because it can’t find a main display. After manually editing the configuration to rename the display module from 01 to main, I am finally able to get the gui window. However, it shows no picture…:


Any clue? (I double checked that the file exists)

Here’s the output when running with -d all, if that helps:

[pipe] connector input read rggb ui16
[pipe] connector output write rgba f16
[pipe] [module so load] loading demosaic
[pipe] connector input read y f16
[pipe] connector output write y f16
[pipe] [module so load] loading tonecurv
[pipe] connector input read rgba ui8
[pipe] connector output write rgba f16
[pipe] [module so load] loading srgb2f
[pipe] connector input read rgba f16
[pipe] connector output write rgba f16
[pipe] [module so load] loading f2srgb
e[31m[ERR]e[0m module shared has no connectors!
[pipe] connector input read rgba f16
[pipe] connector output write rgba ui8
[pipe] [module so load] loading f2srgb8
[pipe] param sigma float
[pipe] param shadows float
[pipe] param hilights float
[pipe] param clarity float
[pipe] connector input read rgba f16
[pipe] connector output write rgba f16
[pipe] [module so load] loading llap
[pipe] param filename string
[pipe] param quality float
[pipe] connector input sink rgba ui8
[pipe] [module so load] loading export8
[pipe] param exposure float
[pipe] connector input read rgba f16
[pipe] connector output write rgba f16
[pipe] [module so load] loading exposure
[pipe] connector input sink rgba f16
[pipe] [module so load] loading display
[pipe] param crop float
[pipe] param mode float
[pipe] connector input read rgba f16
[pipe] connector output write rgba f16
[pipe] [module so load] loading hist
[pipe] param filename string
[pipe] connector output source rggb ui16
[pipe] [module so load] loading rawinput
[pipe] param x0 float
[pipe] param x1 float
[pipe] param x2 float
[pipe] param x3 float
[pipe] param y0 float
[pipe] param y1 float
[pipe] param y2 float
[pipe] param y3 float
[pipe] param black float
[pipe] connector input read rgba f16
[pipe] connector output write rgba f16
[pipe] [module so load] loading filmcurv
[pipe] param filename string
[pipe] connector output source rgba ui8
[pipe] [module so load] loading jpginput
[pipe] param filename string
[pipe] connector input sink rgba f16
[pipe] [module so load] loading export
[pipe] param radius float
[pipe] param edges float
[pipe] param detail float
[pipe] connector input read rgba f16
[pipe] connector output write rgba f16
[pipe] [module so load] loading contrast
[pipe] param perspect float
[pipe] param crop float
[pipe] connector input read rgba f16
[pipe] connector output write rgba f16
[pipe] [module so load] loading crop
e[31m[ERR]e[0m module burst has no connectors!
[gui] vk extension required by SDL2:
[gui]   VK_KHR_surface
[gui]   VK_KHR_xlib_surface
[qvk] available vulkan layers:
[qvk] supported vulkan instance extensions:
[qvk] VK_KHR_external_fence_capabilities
[qvk] VK_KHR_external_memory_capabilities
[qvk] VK_KHR_external_semaphore_capabilities
[qvk] VK_KHR_get_physical_device_properties2
[qvk] VK_KHR_get_surface_capabilities2
[qvk] VK_KHR_surface (requested)
[qvk] VK_KHR_wayland_surface
[qvk] VK_KHR_xcb_surface
[qvk] VK_KHR_xlib_surface (requested)
[qvk] VK_EXT_debug_report (requested)
[qvk] VK_EXT_debug_utils (requested)
[qvk] dev 0: Intel(R) HD Graphics 520 (Skylake GT2)
[qvk] max number of allocations -1
[qvk] max image allocation size 16384 x 16384
[qvk] supported extensions:
[qvk] VK_KHR_bind_memory2
[qvk] VK_KHR_dedicated_allocation
[qvk] VK_KHR_descriptor_update_template
[qvk] VK_KHR_external_memory
[qvk] VK_KHR_external_memory_fd
[qvk] VK_KHR_external_semaphore
[qvk] VK_KHR_external_semaphore_fd
[qvk] VK_KHR_get_memory_requirements2
[qvk] VK_KHR_image_format_list
[qvk] VK_KHR_incremental_present
[qvk] VK_KHR_maintenance1
[qvk] VK_KHR_maintenance2
[qvk] VK_KHR_push_descriptor
[qvk] VK_KHR_relaxed_block_layout
[qvk] VK_KHR_sampler_mirror_clamp_to_edge
[qvk] VK_KHR_sampler_ycbcr_conversion
[qvk] VK_KHR_shader_draw_parameters
[qvk] VK_KHR_storage_buffer_storage_class
[qvk] VK_KHR_swapchain
[qvk] VK_KHR_variable_pointers
[qvk] VK_EXT_external_memory_dma_buf
[qvk] picked device 0
[qvk] num queue families: 1
[qvk] warning: could not load function vkDebugMarkerSetObjectNameEXT
[qvk] num surface formats: 2
[qvk] available surface formats:
[qvk] B8G8R8A8_SRGB
[qvk] B8G8R8A8_UNORM
[qvk] colour space: 0
[pipe] images : peak rss 108.469 MB vmsize 108.473 MB
[pipe] staging: peak rss 35.925 MB vmsize 35.925 MB
[perf] query demosaic_halfsize:	    5.93 ms
[perf] query exposure_main:	    5.67 ms
[perf] query filmcurv_main:	    7.28 ms
[perf] total time:	   25.63 ms
e[31m[ERR]e[0m unknown widget type in darkroom.ui!
[perf] query demosaic_halfsize:	    5.54 ms
[perf] query exposure_main:	    5.74 ms
[perf] query filmcurv_main:	    6.51 ms
[perf] total time:	   24.59 ms
[perf] total frame time 0.013 s
[perf] query demosaic_halfsize:	    6.05 ms
[perf] query exposure_main:	    5.43 ms
[perf] query filmcurv_main:	    6.31 ms
[perf] total time:	   24.42 ms
[perf] total frame time 0.031 s

I am curious where this will develop. And a bit impatient.

hi,

this sounds like you don’t have validation layers. i’m not sure this does anything at all in this case. you can either make clean && make -j (i.e. without debug) to build a version that does not use validation layers. or you can install the vulkan sdk from lunarg and point your env variables to it (see run.sh for example path setups). at least debian also comes with stock validation layers via apt: vulkan-validationlayers-dev which might be similar for whatever setup you use.

sorry for the broken config files, the code is still very much in flux. i also believe i recently broke the cli export. pushed examples/llap.cfg, which is my current test case. to explain what is going on: i want to extend the graph to support multiple outputs and use the “main” display for center view and “hist” for histogram or similar.

on the bright side i can’t see any global show stopping complaints like “no vulkan support on this machine” in your output, so that’s encouraging…

1 Like

Hi, thanks for the investigation! I’ve installed the validation layers, but still no luck unfortunately :frowning:

Here’s another log using examples/llap.cfg in a debug build. Hope this helps.

log.txt (262.2 KB)

i think your glsl compiler might be too old (says something vulkan 1.0, we need 1.1). for reference, on my system:

$ glslangValidator --version
Glslang Version: 7.12.3294
ESSL Version: OpenGL ES GLSL 3.20 glslang Khronos. 12.3294
GLSL Version: 4.60 glslang Khronos. 12.3294
SPIR-V Version 0x00010400, Revision 1
GLSL.std.450 Version 100, Revision 1
Khronos Tool ID 8
SPIR-V Generator Version 7
GL_KHR_vulkan_glsl version 100
ARB_GL_gl_spirv version 100

in fact this may show a problem in the example run.sh setup, the PATH variable should be prepended by the path in the vulkan sdk, maybe that hinders your setup to pick up the correct glslangValidator binary (after changing the path you should do a “make clean” rebuild to compile new spir-v using the correct glslangValidator). hope that helps!

thanks for the support! and sorry for the many questions, I have zero experience with this… it seems that I have vulkan 1.1 installed. Here’s what vulkaninfo reports, in case it’s useful. Btw, I am not using the run.sh script, just calling vkdt directly (I installed the vulkan sdk via apt, I’m running on a derivative of Ubuntu 16.04, using a vulkan version backported from 18.04).

INTEL-MESA: warning: ../../../src/intel/vulkan/anv_device.c:988: FINISHME: Implement pop-free point clipping
==========
VULKANINFO
==========

Vulkan Instance Version: 1.1.114



Instance Extensions:
====================
Instance Extensions	count = 11
	VK_EXT_debug_report                 : extension revision  8
	VK_EXT_debug_utils                  : extension revision  1
	VK_KHR_external_fence_capabilities  : extension revision  1
	VK_KHR_external_memory_capabilities : extension revision  1
	VK_KHR_external_semaphore_capabilities: extension revision  1
	VK_KHR_get_physical_device_properties2: extension revision  1
	VK_KHR_get_surface_capabilities2    : extension revision  1
	VK_KHR_surface                      : extension revision 25
	VK_KHR_wayland_surface              : extension revision  6
	VK_KHR_xcb_surface                  : extension revision  6
	VK_KHR_xlib_surface                 : extension revision  6
Layers: count = 15
=======
VK_LAYER_GOOGLE_threading (Google Validation Layer) Vulkan version 1.1.114, layer version 1
	Layer Extensions	count = 1
		VK_EXT_debug_report                 : extension revision  6
	Devices 	count = 1
		GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
		Layer-Device Extensions	count = 0

VK_LAYER_GOOGLE_unique_objects (Google Validation Layer) Vulkan version 1.1.114, layer version 1
	Layer Extensions	count = 0
	Devices 	count = 1
		GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
		Layer-Device Extensions	count = 0

VK_LAYER_KHRONOS_validation (LunarG Validation Layer) Vulkan version 1.1.114, layer version 1
	Layer Extensions	count = 1
		VK_EXT_debug_report                 : extension revision  6
	Devices 	count = 1
		GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
		Layer-Device Extensions	count = 2
			VK_EXT_debug_marker                 : extension revision  4
			VK_EXT_validation_cache             : extension revision  1

VK_LAYER_LUNARG_api_dump (LunarG API dump layer) Vulkan version 1.1.114, layer version 2
	Layer Extensions	count = 0
	Devices 	count = 1
		GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
		Layer-Device Extensions	count = 0

VK_LAYER_LUNARG_assistant_layer (LunarG Validation Layer Factory Layer) Vulkan version 1.1.114, layer version 1
	Layer Extensions	count = 1
		VK_EXT_debug_report                 : extension revision  6
	Devices 	count = 1
		GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
		Layer-Device Extensions	count = 1
			VK_EXT_debug_marker                 : extension revision  4

VK_LAYER_LUNARG_core_validation (LunarG Validation Layer) Vulkan version 1.1.114, layer version 1
	Layer Extensions	count = 1
		VK_EXT_debug_report                 : extension revision  6
	Devices 	count = 1
		GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
		Layer-Device Extensions	count = 2
			VK_EXT_debug_marker                 : extension revision  4
			VK_EXT_validation_cache             : extension revision  1

VK_LAYER_LUNARG_demo_layer (LunarG Validation Layer Factory Layer) Vulkan version 1.1.114, layer version 1
	Layer Extensions	count = 1
		VK_EXT_debug_report                 : extension revision  6
	Devices 	count = 1
		GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
		Layer-Device Extensions	count = 1
			VK_EXT_debug_marker                 : extension revision  4

VK_LAYER_LUNARG_device_simulation (LunarG device simulation layer) Vulkan version 1.1.114, layer version 1
	Layer Extensions	count = 0
	Devices 	count = 1
		GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
		Layer-Device Extensions	count = 0

VK_LAYER_LUNARG_monitor (Execution Monitoring Layer) Vulkan version 1.1.114, layer version 1
	Layer Extensions	count = 0
	Devices 	count = 1
		GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
		Layer-Device Extensions	count = 0

VK_LAYER_LUNARG_object_tracker (LunarG Validation Layer) Vulkan version 1.1.114, layer version 1
	Layer Extensions	count = 1
		VK_EXT_debug_report                 : extension revision  6
	Devices 	count = 1
		GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
		Layer-Device Extensions	count = 1
			VK_EXT_debug_marker                 : extension revision  4

VK_LAYER_LUNARG_parameter_validation (LunarG Validation Layer) Vulkan version 1.1.114, layer version 1
	Layer Extensions	count = 1
		VK_EXT_debug_report                 : extension revision  6
	Devices 	count = 1
		GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
		Layer-Device Extensions	count = 1
			VK_EXT_debug_marker                 : extension revision  4

VK_LAYER_LUNARG_screenshot (LunarG image capture layer) Vulkan version 1.1.114, layer version 1
	Layer Extensions	count = 0
	Devices 	count = 1
		GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
		Layer-Device Extensions	count = 0

VK_LAYER_LUNARG_standard_validation (LunarG Standard Validation) Vulkan version 1.1.114, layer version 1
	Layer Extensions	count = 1
		VK_EXT_debug_report                 : extension revision  6
	Devices 	count = 1
		GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
		Layer-Device Extensions	count = 2
			VK_EXT_debug_marker                 : extension revision  4
			VK_EXT_validation_cache             : extension revision  1

VK_LAYER_LUNARG_starter_layer (LunarG Validation Layer Factory Layer) Vulkan version 1.1.114, layer version 1
	Layer Extensions	count = 1
		VK_EXT_debug_report                 : extension revision  6
	Devices 	count = 1
		GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
		Layer-Device Extensions	count = 1
			VK_EXT_debug_marker                 : extension revision  4

VK_LAYER_LUNARG_vktrace (Vktrace tracing library) Vulkan version 1.1.114, layer version 1
	Layer Extensions	count = 0
	Devices 	count = 1
		GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
		Layer-Device Extensions	count = 0

Presentable Surfaces:
=====================
GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
Surface type : VK_KHR_xlib_surface
Formats:		count = 2
	B8G8R8A8_SRGB
	B8G8R8A8_UNORM
Present Modes:		count = 3
	IMMEDIATE_KHR
	MAILBOX_KHR
	FIFO_KHR
VkSurfaceCapabilitiesKHR:
	minImageCount       = 2
	maxImageCount       = 0
	currentExtent:
		width       = 256
		height      = 256
	minImageExtent:
		width       = 256
		height      = 256
	maxImageExtent:
		width       = 256
		height      = 256
	maxImageArrayLayers = 1
	supportedTransform:
		VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR
	currentTransform:
		VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR
	supportedCompositeAlpha:
		VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR
		VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR
	supportedUsageFlags:
		VK_IMAGE_USAGE_TRANSFER_SRC_BIT
		VK_IMAGE_USAGE_TRANSFER_DST_BIT
		VK_IMAGE_USAGE_SAMPLED_BIT
		VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT

GPU id       : 0 (Intel(R) HD Graphics 520 (Skylake GT2))
Surface type : VK_KHR_xcb_surface
Formats:		count = 2
	B8G8R8A8_SRGB
	B8G8R8A8_UNORM
Present Modes:		count = 3
	IMMEDIATE_KHR
	MAILBOX_KHR
	FIFO_KHR
VkSurfaceCapabilitiesKHR:
	minImageCount       = 2
	maxImageCount       = 0
	currentExtent:
		width       = 256
		height      = 256
	minImageExtent:
		width       = 256
		height      = 256
	maxImageExtent:
		width       = 256
		height      = 256
	maxImageArrayLayers = 1
	supportedTransform:
		VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR
	currentTransform:
		VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR
	supportedCompositeAlpha:
		VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR
		VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR
	supportedUsageFlags:
		VK_IMAGE_USAGE_TRANSFER_SRC_BIT
		VK_IMAGE_USAGE_TRANSFER_DST_BIT
		VK_IMAGE_USAGE_SAMPLED_BIT
		VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT


Device Properties and Extensions :
==================================
GPU0
VkPhysicalDeviceProperties:
===========================
	apiVersion     = 0x400039  (1.0.57)
	driverVersion  = 75497477 (0x4800005)
	vendorID       = 0x8086
	deviceID       = 0x1916
	deviceType     = INTEGRATED_GPU
	deviceName     = Intel(R) HD Graphics 520 (Skylake GT2)
	VkPhysicalDeviceLimits:
	-----------------------
		maxImageDimension1D                     = 16384
		maxImageDimension2D                     = 16384
		maxImageDimension3D                     = 2048
		maxImageDimensionCube                   = 16384
		maxImageArrayLayers                     = 2048
		maxTexelBufferElements                  = 0x8000000
		maxUniformBufferRange                   = 0x8000000
		maxStorageBufferRange                   = 0x40000000
		maxPushConstantsSize                    = 128
		maxMemoryAllocationCount                = 4294967295
		maxSamplerAllocationCount               = 65536
		bufferImageGranularity                  = 0x40
		sparseAddressSpaceSize                  = 0x0
		maxBoundDescriptorSets                  = 8
		maxPerStageDescriptorSamplers           = 128
		maxPerStageDescriptorUniformBuffers     = 64
		maxPerStageDescriptorStorageBuffers     = 64
		maxPerStageDescriptorSampledImages      = 128
		maxPerStageDescriptorStorageImages      = 64
		maxPerStageDescriptorInputAttachments   = 64
		maxPerStageResources                    = 250
		maxDescriptorSetSamplers                = 768
		maxDescriptorSetUniformBuffers          = 384
		maxDescriptorSetUniformBuffersDynamic   = 8
		maxDescriptorSetStorageBuffers          = 384
		maxDescriptorSetStorageBuffersDynamic   = 8
		maxDescriptorSetSampledImages           = 768
		maxDescriptorSetStorageImages           = 384
		maxDescriptorSetInputAttachments        = 256
		maxVertexInputAttributes                = 28
		maxVertexInputBindings                  = 28
		maxVertexInputAttributeOffset           = 0x7ff
		maxVertexInputBindingStride             = 0x800
		maxVertexOutputComponents               = 128
		maxTessellationGenerationLevel          = 64
		maxTessellationPatchSize                        = 32
		maxTessellationControlPerVertexInputComponents  = 128
		maxTessellationControlPerVertexOutputComponents = 128
		maxTessellationControlPerPatchOutputComponents  = 128
		maxTessellationControlTotalOutputComponents     = 2048
		maxTessellationEvaluationInputComponents        = 128
		maxTessellationEvaluationOutputComponents       = 128
		maxGeometryShaderInvocations            = 32
		maxGeometryInputComponents              = 64
		maxGeometryOutputComponents             = 128
		maxGeometryOutputVertices               = 256
		maxGeometryTotalOutputComponents        = 1024
		maxFragmentInputComponents              = 128
		maxFragmentOutputAttachments            = 8
		maxFragmentDualSrcAttachments           = 1
		maxFragmentCombinedOutputResources      = 8
		maxComputeSharedMemorySize              = 32768
		maxComputeWorkGroupCount[0]             = 65535
		maxComputeWorkGroupCount[1]             = 65535
		maxComputeWorkGroupCount[2]             = 65535
		maxComputeWorkGroupInvocations          = 896
		maxComputeWorkGroupSize[0]              = 896
		maxComputeWorkGroupSize[1]              = 896
		maxComputeWorkGroupSize[2]              = 896
		subPixelPrecisionBits                   = 4
		subTexelPrecisionBits                   = 4
		mipmapPrecisionBits                     = 4
		maxDrawIndexedIndexValue                = 4294967295
		maxDrawIndirectCount                    = 4294967295
		maxSamplerLodBias                       = 16.000000
		maxSamplerAnisotropy                    = 16.000000
		maxViewports                            = 16
		maxViewportDimensions[0]                = 16384
		maxViewportDimensions[1]                = 16384
		viewportBoundsRange[0]                  = -32768.000000
		viewportBoundsRange[1]                  =  32767.000000
		viewportSubPixelBits                    = 13
		minMemoryMapAlignment                   = 4096
		minTexelBufferOffsetAlignment           = 0x1
		minUniformBufferOffsetAlignment         = 0x20
		minStorageBufferOffsetAlignment         = 0x4
		minTexelOffset                          =  -8
		maxTexelOffset                          =   7
		minTexelGatherOffset                    = -32
		maxTexelGatherOffset                    =  31
		minInterpolationOffset                  = -0.500000
		maxInterpolationOffset                  =  0.437500
		subPixelInterpolationOffsetBits         = 4
		maxFramebufferWidth                     = 16384
		maxFramebufferHeight                    = 16384
		maxFramebufferLayers                    = 2048
		framebufferColorSampleCounts            = 31
		framebufferDepthSampleCounts            = 31
		framebufferStencilSampleCounts          = 31
		framebufferNoAttachmentsSampleCounts    = 31
		maxColorAttachments                     = 8
		sampledImageColorSampleCounts           = 31
		sampledImageDepthSampleCounts           = 31
		sampledImageStencilSampleCounts         = 31
		sampledImageIntegerSampleCounts         = 1
		storageImageSampleCounts                = 1
		maxSampleMaskWords                      = 1
		timestampComputeAndGraphics             = 0
		timestampPeriod                         = 83.333336
		maxClipDistances                        = 8
		maxCullDistances                        = 8
		maxCombinedClipAndCullDistances         = 8
		discreteQueuePriorities                 = 1
		pointSizeRange[0]                       = 0.125000
		pointSizeRange[1]                       = 255.875000
		lineWidthRange[0]                       = 0.000000
		lineWidthRange[1]                       = 7.992188
		pointSizeGranularity                    = 0.125000
		lineWidthGranularity                    = 0.007812
		strictLines                             = 0
		standardSampleLocations                 = 1
		optimalBufferCopyOffsetAlignment        = 0x80
		optimalBufferCopyRowPitchAlignment      = 0x80
		nonCoherentAtomSize                     = 0x40
	VkPhysicalDeviceSparseProperties:
	---------------------------------
		residencyStandard2DBlockShape            = 0
		residencyStandard2DMultisampleBlockShape = 0
		residencyStandard3DBlockShape            = 0
		residencyAlignedMipSize                  = 0
		residencyNonResidentStrict               = 0

VkPhysicalDevicePointClippingProperties:
========================================
	pointClippingBehavior               = 0

VkPhysicalDevicePushDescriptorProperties:
=========================================
	maxPushDescriptors               = 32

VkPhysicalDeviceMaintenance3Properties:
=======================================
	maxPerSetDescriptors    = 0
	maxMemoryAllocationSize = 0

VkPhysicalDeviceIDProperties:
=========================================
	deviceUUID      = f266f5d1-e7e2-0f15-9db8-b0b96b3aa740
	driverUUID      = 7eeb7097-d8bd-f00f-103d-d5e8af81ee65
	deviceLUIDValid = false

Device Extensions	count = 21
	VK_EXT_external_memory_dma_buf      : extension revision  1
	VK_KHR_bind_memory2                 : extension revision  1
	VK_KHR_dedicated_allocation         : extension revision  1
	VK_KHR_descriptor_update_template   : extension revision  1
	VK_KHR_external_memory              : extension revision  1
	VK_KHR_external_memory_fd           : extension revision  1
	VK_KHR_external_semaphore           : extension revision  1
	VK_KHR_external_semaphore_fd        : extension revision  1
	VK_KHR_get_memory_requirements2     : extension revision  1
	VK_KHR_image_format_list            : extension revision  1
	VK_KHR_incremental_present          : extension revision  1
	VK_KHR_maintenance1                 : extension revision  1
	VK_KHR_maintenance2                 : extension revision  1
	VK_KHR_push_descriptor              : extension revision  1
	VK_KHR_relaxed_block_layout         : extension revision  1
	VK_KHR_sampler_mirror_clamp_to_edge : extension revision  1
	VK_KHR_sampler_ycbcr_conversion     : extension revision  1
	VK_KHR_shader_draw_parameters       : extension revision  1
	VK_KHR_storage_buffer_storage_class : extension revision  1
	VK_KHR_swapchain                    : extension revision 68
	VK_KHR_variable_pointers            : extension revision  1

VkQueueFamilyProperties[0]:
===========================
	queueFlags         = GRAPHICS | COMPUTE | TRANSFER
	queueCount         = 1
	timestampValidBits = 36
	minImageTransferGranularity = (1, 1, 1)
	present support    = true

VkPhysicalDeviceMemoryProperties:
=================================
	memoryHeapCount       = 2
	memoryHeaps[0] :
		size          = 14612787200 (0x366fd7000) (13.61 GiB)
		flags:
			VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
	memoryHeaps[1] :
		size          = 1073741824 (0x40000000) (1024.00 MiB)
		flags:
			VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
	memoryTypeCount       = 2
	memoryTypes[0] :
		heapIndex     = 0
		propertyFlags = 0xf:
			VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
			VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
			VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
			VK_MEMORY_PROPERTY_HOST_CACHED_BIT
		usable for:
			OPTIMAL: color images, D16_UNORM, X8_D24_UNORM_PACK32, D32_SFLOAT, S8_UINT, D24_UNORM_S8_UINT, D32_SFLOAT_S8_UINT
			LINEAR: color images
	memoryTypes[1] :
		heapIndex     = 1
		propertyFlags = 0xf:
			VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
			VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
			VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
			VK_MEMORY_PROPERTY_HOST_CACHED_BIT
		usable for:
			OPTIMAL: color images, D16_UNORM, X8_D24_UNORM_PACK32, D32_SFLOAT, S8_UINT, D24_UNORM_S8_UINT, D32_SFLOAT_S8_UINT
			LINEAR: color images

VkPhysicalDeviceFeatures:
=========================
	robustBufferAccess                      = 1
	fullDrawIndexUint32                     = 1
	imageCubeArray                          = 1
	independentBlend                        = 1
	geometryShader                          = 1
	tessellationShader                      = 1
	sampleRateShading                       = 1
	dualSrcBlend                            = 1
	logicOp                                 = 1
	multiDrawIndirect                       = 1
	drawIndirectFirstInstance               = 1
	depthClamp                              = 1
	depthBiasClamp                          = 1
	fillModeNonSolid                        = 1
	depthBounds                             = 0
	wideLines                               = 1
	largePoints                             = 1
	alphaToOne                              = 1
	multiViewport                           = 1
	samplerAnisotropy                       = 1
	textureCompressionETC2                  = 1
	textureCompressionASTC_LDR              = 1
	textureCompressionBC                    = 1
	occlusionQueryPrecise                   = 1
	pipelineStatisticsQuery                 = 1
	vertexPipelineStoresAndAtomics          = 1
	fragmentStoresAndAtomics                = 1
	shaderTessellationAndGeometryPointSize  = 1
	shaderImageGatherExtended               = 1
	shaderStorageImageExtendedFormats       = 1
	shaderStorageImageMultisample           = 0
	shaderStorageImageReadWithoutFormat     = 0
	shaderStorageImageWriteWithoutFormat    = 1
	shaderUniformBufferArrayDynamicIndexing = 1
	shaderSampledImageArrayDynamicIndexing  = 1
	shaderStorageBufferArrayDynamicIndexing = 1
	shaderStorageImageArrayDynamicIndexing  = 1
	shaderClipDistance                      = 1
	shaderCullDistance                      = 1
	shaderFloat64                           = 1
	shaderInt64                             = 1
	shaderInt16                             = 0
	shaderResourceResidency                 = 0
	shaderResourceMinLod                    = 0
	sparseBinding                           = 0
	sparseResidencyBuffer                   = 0
	sparseResidencyImage2D                  = 0
	sparseResidencyImage3D                  = 0
	sparseResidency2Samples                 = 0
	sparseResidency4Samples                 = 0
	sparseResidency8Samples                 = 0
	sparseResidency16Samples                = 0
	sparseResidencyAliased                  = 0
	variableMultisampleRate                 = 0
	inheritedQueries                        = 1

VkPhysicalDeviceSamplerYcbcrConversionFeatures:
===============================================
	samplerYcbcrConversion = 1

VkPhysicalDeviceVariablePointerFeatures:
========================================
	variablePointersStorageBuffer = 1
	variablePointers              = 1

Format Properties:
==================

FORMAT_R4G4B4A4_UNORM_PACK16,
FORMAT_B4G4R4A4_UNORM_PACK16:
	linearTiling   FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_BLIT_DST_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	optimalTiling  FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_BLIT_DST_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	bufferFeatures FormatFeatureFlags:
		VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

FORMAT_R5G6B5_UNORM_PACK16,
FORMAT_B5G6R5_UNORM_PACK16,
FORMAT_A1R5G5B5_UNORM_PACK16,
FORMAT_R8G8B8A8_SRGB,
FORMAT_B8G8R8A8_SRGB,
FORMAT_A8B8G8R8_SRGB_PACK32:
	linearTiling   FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_BLIT_DST_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	optimalTiling  FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_BLIT_DST_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	bufferFeatures FormatFeatureFlags:
		VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

FORMAT_R8_UNORM,
FORMAT_R8_SNORM,
FORMAT_R8G8_UNORM,
FORMAT_R8G8_SNORM,
FORMAT_R8G8B8A8_UNORM,
FORMAT_R8G8B8A8_SNORM,
FORMAT_A8B8G8R8_UNORM_PACK32,
FORMAT_A8B8G8R8_SNORM_PACK32,
FORMAT_A2B10G10R10_UNORM_PACK32,
FORMAT_R16_UNORM,
FORMAT_R16_SNORM,
FORMAT_R16_SFLOAT,
FORMAT_R16G16_UNORM,
FORMAT_R16G16_SNORM,
FORMAT_R16G16_SFLOAT,
FORMAT_R16G16B16A16_UNORM,
FORMAT_R16G16B16A16_SNORM,
FORMAT_R16G16B16A16_SFLOAT,
FORMAT_R32_SFLOAT,
FORMAT_R32G32_SFLOAT,
FORMAT_R32G32B32A32_SFLOAT,
FORMAT_B10G11R11_UFLOAT_PACK32:
	linearTiling   FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_BLIT_DST_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	optimalTiling  FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_BLIT_DST_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	bufferFeatures FormatFeatureFlags:
		VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
		VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
		VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8_USCALED,
FORMAT_R8_SSCALED,
FORMAT_R8G8_USCALED,
FORMAT_R8G8_SSCALED,
FORMAT_R8G8B8_USCALED,
FORMAT_R8G8B8_SSCALED,
FORMAT_R8G8B8A8_USCALED,
FORMAT_R8G8B8A8_SSCALED,
FORMAT_A8B8G8R8_USCALED_PACK32,
FORMAT_A8B8G8R8_SSCALED_PACK32,
FORMAT_A2R10G10B10_SNORM_PACK32,
FORMAT_A2R10G10B10_USCALED_PACK32,
FORMAT_A2R10G10B10_SSCALED_PACK32,
FORMAT_A2R10G10B10_UINT_PACK32,
FORMAT_A2R10G10B10_SINT_PACK32,
FORMAT_A2B10G10R10_SNORM_PACK32,
FORMAT_A2B10G10R10_USCALED_PACK32,
FORMAT_A2B10G10R10_SSCALED_PACK32,
FORMAT_A2B10G10R10_SINT_PACK32,
FORMAT_R16_USCALED,
FORMAT_R16_SSCALED,
FORMAT_R16G16_USCALED,
FORMAT_R16G16_SSCALED,
FORMAT_R16G16B16_USCALED,
FORMAT_R16G16B16_SSCALED,
FORMAT_R16G16B16A16_USCALED,
FORMAT_R16G16B16A16_SSCALED,
FORMAT_R64_UINT,
FORMAT_R64_SINT,
FORMAT_R64_SFLOAT,
FORMAT_R64G64_UINT,
FORMAT_R64G64_SINT,
FORMAT_R64G64_SFLOAT,
FORMAT_R64G64B64_UINT,
FORMAT_R64G64B64_SINT,
FORMAT_R64G64B64_SFLOAT,
FORMAT_R64G64B64A64_UINT,
FORMAT_R64G64B64A64_SINT,
FORMAT_R64G64B64A64_SFLOAT:
	linearTiling   FormatFeatureFlags:
		None

	optimalTiling  FormatFeatureFlags:
		None

	bufferFeatures FormatFeatureFlags:
		VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8_UINT,
FORMAT_R8_SINT,
FORMAT_R8G8_UINT,
FORMAT_R8G8_SINT,
FORMAT_R8G8B8A8_UINT,
FORMAT_R8G8B8A8_SINT,
FORMAT_A8B8G8R8_UINT_PACK32,
FORMAT_A8B8G8R8_SINT_PACK32,
FORMAT_A2B10G10R10_UINT_PACK32,
FORMAT_R16_UINT,
FORMAT_R16_SINT,
FORMAT_R16G16_UINT,
FORMAT_R16G16_SINT,
FORMAT_R16G16B16A16_UINT,
FORMAT_R16G16B16A16_SINT,
FORMAT_R32G32_UINT,
FORMAT_R32G32_SINT,
FORMAT_R32G32B32A32_UINT,
FORMAT_R32G32B32A32_SINT:
	linearTiling   FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_BLIT_DST_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	optimalTiling  FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_BLIT_DST_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	bufferFeatures FormatFeatureFlags:
		VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
		VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
		VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8_SRGB,
FORMAT_R8G8B8_SRGB,
FORMAT_E5B9G9R9_UFLOAT_PACK32:
	linearTiling   FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	optimalTiling  FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	bufferFeatures FormatFeatureFlags:
		VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

FORMAT_R8G8B8_UNORM,
FORMAT_R8G8B8_SNORM,
FORMAT_R16G16B16_UNORM,
FORMAT_R16G16B16_SNORM,
FORMAT_R32G32B32_SFLOAT:
	linearTiling   FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	optimalTiling  FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	bufferFeatures FormatFeatureFlags:
		VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
		VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8G8B8_UINT,
FORMAT_R8G8B8_SINT,
FORMAT_R16G16B16_UINT,
FORMAT_R16G16B16_SINT,
FORMAT_R32G32B32_UINT,
FORMAT_R32G32B32_SINT:
	linearTiling   FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	optimalTiling  FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	bufferFeatures FormatFeatureFlags:
		VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
		VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_B8G8R8A8_UNORM,
FORMAT_A2R10G10B10_UNORM_PACK32:
	linearTiling   FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_BLIT_DST_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	optimalTiling  FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_BLIT_DST_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	bufferFeatures FormatFeatureFlags:
		VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
		VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16B16_SFLOAT:
	linearTiling   FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	optimalTiling  FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_BLIT_DST_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	bufferFeatures FormatFeatureFlags:
		VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
		VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32_UINT,
FORMAT_R32_SINT:
	linearTiling   FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
		VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_BLIT_DST_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	optimalTiling  FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
		VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
		VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_BLIT_DST_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	bufferFeatures FormatFeatureFlags:
		VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
		VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
		VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
		VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_D16_UNORM,
FORMAT_X8_D24_UNORM_PACK32,
FORMAT_D32_SFLOAT,
FORMAT_S8_UINT,
FORMAT_D24_UNORM_S8_UINT,
FORMAT_D32_SFLOAT_S8_UINT:
	linearTiling   FormatFeatureFlags:
		None

	optimalTiling  FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_BLIT_DST_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	bufferFeatures FormatFeatureFlags:
		None

FORMAT_BC1_RGB_UNORM_BLOCK,
FORMAT_BC1_RGB_SRGB_BLOCK,
FORMAT_BC1_RGBA_UNORM_BLOCK,
FORMAT_BC1_RGBA_SRGB_BLOCK,
FORMAT_BC2_UNORM_BLOCK,
FORMAT_BC2_SRGB_BLOCK,
FORMAT_BC3_UNORM_BLOCK,
FORMAT_BC3_SRGB_BLOCK,
FORMAT_BC4_UNORM_BLOCK,
FORMAT_BC4_SNORM_BLOCK,
FORMAT_BC5_UNORM_BLOCK,
FORMAT_BC5_SNORM_BLOCK,
FORMAT_BC6H_UFLOAT_BLOCK,
FORMAT_BC6H_SFLOAT_BLOCK,
FORMAT_BC7_UNORM_BLOCK,
FORMAT_BC7_SRGB_BLOCK,
FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,
FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,
FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
FORMAT_EAC_R11_UNORM_BLOCK,
FORMAT_EAC_R11_SNORM_BLOCK,
FORMAT_EAC_R11G11_UNORM_BLOCK,
FORMAT_EAC_R11G11_SNORM_BLOCK:
	linearTiling   FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	optimalTiling  FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	bufferFeatures FormatFeatureFlags:
		None

FORMAT_ASTC_4x4_UNORM_BLOCK,
FORMAT_ASTC_4x4_SRGB_BLOCK,
FORMAT_ASTC_5x4_UNORM_BLOCK,
FORMAT_ASTC_5x4_SRGB_BLOCK,
FORMAT_ASTC_5x5_UNORM_BLOCK,
FORMAT_ASTC_5x5_SRGB_BLOCK,
FORMAT_ASTC_6x5_UNORM_BLOCK,
FORMAT_ASTC_6x5_SRGB_BLOCK,
FORMAT_ASTC_6x6_UNORM_BLOCK,
FORMAT_ASTC_6x6_SRGB_BLOCK,
FORMAT_ASTC_8x5_UNORM_BLOCK,
FORMAT_ASTC_8x5_SRGB_BLOCK,
FORMAT_ASTC_8x6_UNORM_BLOCK,
FORMAT_ASTC_8x6_SRGB_BLOCK,
FORMAT_ASTC_8x8_UNORM_BLOCK,
FORMAT_ASTC_8x8_SRGB_BLOCK,
FORMAT_ASTC_10x5_UNORM_BLOCK,
FORMAT_ASTC_10x5_SRGB_BLOCK,
FORMAT_ASTC_10x6_UNORM_BLOCK,
FORMAT_ASTC_10x6_SRGB_BLOCK,
FORMAT_ASTC_10x8_UNORM_BLOCK,
FORMAT_ASTC_10x8_SRGB_BLOCK,
FORMAT_ASTC_10x10_UNORM_BLOCK,
FORMAT_ASTC_10x10_SRGB_BLOCK,
FORMAT_ASTC_12x10_UNORM_BLOCK,
FORMAT_ASTC_12x10_SRGB_BLOCK,
FORMAT_ASTC_12x12_UNORM_BLOCK,
FORMAT_ASTC_12x12_SRGB_BLOCK:
	linearTiling   FormatFeatureFlags:
		None

	optimalTiling  FormatFeatureFlags:
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
		VK_FORMAT_FEATURE_BLIT_SRC_BIT
		VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
		VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
		VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

	bufferFeatures FormatFeatureFlags:
		None

Unsupported formats:
FORMAT_UNDEFINED
FORMAT_R4G4_UNORM_PACK8
FORMAT_R5G5B5A1_UNORM_PACK16
FORMAT_B5G5R5A1_UNORM_PACK16
FORMAT_R8G8_SRGB
FORMAT_B8G8R8_UNORM
FORMAT_B8G8R8_SNORM
FORMAT_B8G8R8_USCALED
FORMAT_B8G8R8_SSCALED
FORMAT_B8G8R8_UINT
FORMAT_B8G8R8_SINT
FORMAT_B8G8R8_SRGB
FORMAT_B8G8R8A8_SNORM
FORMAT_B8G8R8A8_USCALED
FORMAT_B8G8R8A8_SSCALED
FORMAT_B8G8R8A8_UINT
FORMAT_B8G8R8A8_SINT
FORMAT_D16_UNORM_S8_UINT

that sounds all good, you just need to make sure the correct glslangValidator (glsl to spir-v compiler) is picked up during “make debug”.

now with pipeline that supports multiple outputs. demonstration with waveform histogram branching off the end of the pipe (but could attach anywhere). ignore the debug visualisation overlaid in purple (shows the log/s film curve resulting from the given parameters).

1 Like

looks very interesting! Unfortunately, still no luck here :sob: I only have one glslangValidator, and here’s what it says:

Glslang Version: 7.12.3294
ESSL Version: OpenGL ES GLSL 3.20 glslang Khronos. 12.3294
GLSL Version: 4.60 glslang Khronos. 12.3294
SPIR-V Version 0x00010400, Revision 1
GLSL.std.450 Version 100, Revision 1
Khronos Tool ID 8
SPIR-V Generator Version 7
GL_KHR_vulkan_glsl version 100
ARB_GL_gl_spirv version 100

Could be a problem of SDL version?

I’d like to start contributing more actively to this project, in particular:

  • adapt my CI scripts to provide automated Linux/OSX/Windows packages, so that testing the code will be easier
  • work on the user interface, for example to introduce a way to insert, delete and re-order the tools and to update the processing pipeline accordingly

The second point is the most important one, and deserves some planning and discussion.

As already discussed, the idea would be to build the UI on top of imgui. This will hopefully have the advantage of giving us better control on the color management, and avoid all issues with intermediate libraries (like the color management mess of Cairo under OSX).

Concerning the UI representation of the pipeline, one obvious possibility is to duplicate what I have written for PhotoFlow, that is a representation based on a tree-like layer structure, each layer having its own opacity mask.
Or one can opt for a node-based representation.
Or both. Or something smart and new, if anyone has a bright idea on the subject…

@hanatos regarding the opacity masks, would it be possible to implement (if not already available) a generic “blend” tool? It should take three inputs (top and bottom nodes and a grayscale opacity mask), blend the top and bottom buffers according to the opacity and the selected blend mode, and generate one output image…

4 Likes

i agree. currently i don’t really have a gui concept at all. there’s darkroom.ui which is a list of ui controls to be shown for certain params of modules. they are not ordered by module nor will all params of all modules be mapped to the ui (they need to be in the .ui file).

since the module graph is a graph… a node based ui would probably map most directly to it. but it’s also very technical. not sure what we’re aiming for at this point. a streamlined photography workflow thing would probably expose very few but important controls? we could have multiple different, preconfigured pipelines with different uis for different tasks? i mean not all graphs require multiple raw images as inputs, and the ones which do might be special otherwise.

there are a few things in the core that are blocking more workflow oriented development at this point. i’m not storing any kind of undo history. there’s a shutdown.cfg written on shutdown with your last edits, that’s all. i’d need to adjust the ui to record slider changes for this to work (currently it just silently updates the data behind a float* or similar).

re: colour management: yes, the situation should be a lot better:
https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkColorSpaceKHR.html
but much of the current code is pretty ignorant about colour (no input matrix because i want spectral characterisation, pipe runs rec2020, output is currently srgb).

re: blending/opacity masks: yes, that will be simple, i can do that module. i only have draft code for the drawn masks so far, however, and creating parametric masks on the fly might be faster than using an extra texture fetch.

I am very interested in this part of the discussion. I am a non-linear thinker and so would love a mind, concept or cloud map based view with the ability to overlay certain info or to change the view of a certain region. The more malleable the better. Of course, I don’t know whether there would be an audience for that stuff but it would definitely be awesome to demonstrate. :stuck_out_tongue:

I finally got it running. It’s smooth as butter, but I tried making the window bigger than 1080p to see how it performs at larger sizes on my RX480… and then found that resizing doesn’t work, and changing various things inside gui.c doesn’t work too well…

For this, some PhotoFlow code might be of help. I already have the code to store and retrieve a node graph into an XML file, and I have some code that implements “node properties”, that is processing parameters that are linked on one side to the UI controls and on the other side to the processing pipeline. Each property also has its own code for saving and retrieving the values from/to the XML data (this is handled via C++ streams and templates).

If I understand your suggestion correctly, my feeling is that this goes again in the direction of a “static” (or “semi-static”) pipeline, with pre-configured groups of tools.
I would prefer to give the user the freedom to put the tools in the order they want, with as many instances as needed. Each tool would have its own controls. Also, each tool would not need to know the source of its input. For example, an exposure adjustment or a tone mapping would work in the same way, regardless if the input comes from a single image or a merge of multiple bracketed RAWs…

I think that at some point we will need a more flexible and sophisticated way of defining the UI layout, because different modules will have very different UI concepts (sliders, color wheels, color patches, curves with nodes, etc…)

1 Like

Let me have a look into this. Making the window and the controls resizable can be a good way to start familiarizing with the imgui toolkit.

@hanatos I am trying to run the latest version on MacOS (via MoltenVK), but I get the following error with the examples/llap.cfg file:

[***MoltenVK ERROR***] VK_ERROR_FORMAT_NOT_SUPPORTED: Unable to convert SPIR-V to MSL:
MSL conversion error: Cannot yet map non-aliased parameter to Metal resource!


[***MoltenVK ERROR***] VK_ERROR_INITIALIZATION_FAILED: Compute shader function could not be compiled into pipeline. See previous error.
[ERR] running the graph failed!

Any idea?
Maybe this could help: MSL conversion error: Cannot yet map non-aliased parameter to Metal resource! · Issue #346 · KhronosGroup/MoltenVK · GitHub

yeah i was too lazy to implement resizing. it requires rebuilding the swap chain. there’s still the example gui/main.cpp file (not compiled) which has some code snippets for that. this is more a vulkan exercise than an imgui exercise.

… i was trying to avoid xml. the cfg files are ascii text, and i want the same as binary format for internal storage so it can be parsed/stored for backup more quickly. since we’re dealing with a graph, there’s a lot of node name matching already. so i borrowed a 90s game dev idea to define short tokens (8 characters) and store and compare them as uint64_t for some speedup. i expect there will be some need for further optimisation/caching on the graph traversal at some point. certainly don’t want to parse my parameters from even more complicated text representation.

ah, no. i want the pipeline to be a free graph. this is just about the user interface. or the user interfaces. darkroom.ui is just one example thing that should be customisable very freely (similar to the list of favourite modules in dt now). and there is absolutely a need for something that lets the user define graph layouts. not sure this will be the #1 use case during photographic workflow, so maybe a few predefined layouts and some way to define your own and modify existing would suffice. this could be done via a full blown node editor, or because it’s not a task that is done often, maybe through a scripting interface (lua/python?) or by editing the cfg files up front.

yes, i was thinking about that. i don’t like the mess we have in darktable, where a module is intermingled hopelessly in gui and core code. i’d like our modules here to be just core code. and the gui somewhere else. plus, the algorithms are glsl, the module interface is c, and the gui calls to imgui are c++. so i thought a hard cut between core and gui would be good.

the current concept is: the module knows nothing about the gui and doesn’t care. there is a config file (darkroom.ui now, rudimentary) which connects module params to gui. there are keywords for certain widgets, and gui/render.cpp or similar knows how to interpret them. i’m sure we’ll do a lot of single-use widgets this way (only one module uses them), but that doesn’t duplicate any code nor produces it more complexity than putting the gui code straight into the module.

for now i have as widgets: sliders, axis aligned boxes (for crop), free quads (for perspective correction). imgui provides quite a few more out of the box.

oh, any idea which compute shader file is causing it? if this is just about passing samplers around or using or not using texture swizzling it can probably be easy to reformulate the glsl to work around it. sounds a bit hard to remote-debug unfortunately.

Not yet, but I can already tell you that examples/raw.cfg works fine… I will try to identify the guilty module.