Jump to content
  • Sign Up

Need help with running GW2 on linux!


Recommended Posts

1 minute ago, Astyrah.4015 said:

 

i would like to point out that AMDGPU and AMDGPU-Pro are different, the former is the opensource drivers (just like Mesa) and the latter is proprietary (just like the windows drivers) so they may run and you can try, generally speaking they should still work and if stuff breaks you're dead set to re-format anyway.

 

for stuff made for Ubuntu or Debian, anything made for these will generally work the same way on distros based on them (like Pop, Linux Mint, Kubuntu, etc.)

 

but stuff made for Arch or only available on the Arch repositories for example only work on Arch and Arch-based distros like Manjaro, Endeavour. in this case you need to find a different solution based on your distro (and there usually is after you do a bit of googling)

 

 

 

 

I see. Thanks! I'll try it now, see what happens. 😅

Link to comment
Share on other sites

Ok, of all the dumb problems i had ever, this as got to be the dumbest...

 

So, i installed PopOS, fresh install, updated it, the works.

Then i followed Armored's youtube video to set up the OS for the game.

Installed the game (just popped a backed up .dat file into the directory - screw downloading 50GB! lol) and of course, couldn't initialize 3D blah blah, as expected...

 

Then i did some digging...

 

Apparently (and i think this was the exact same issue in Ubuntu), Pop was using Radeon drivers instead of AMDGPU driver.

I followed a tutorial on how to change that, added some lines to grub, upadted grub and...

 

It just magically worked.

 

I tested Siren's landing, i get 40ish FPS there, very smooth, cities are at 25 fps and WvW is 20-ish at Medium settings lowest character limit. Which was about the same performance i had on WIndows with d912pxy, i wasn't expecting miracles and this is good enough for me! I know my system's limits and that GW2 isn't exactly super optimised.

 

The only thing i need to fix now is input lag.

I get input lag in WvW and while it's not in the "unplayable" levels, it's certainly very disorienting.

There's a slight delay between me stopping to press a key, and my character actually stopping. Same happens when i change directions, it takes a noticable amount of time for my character to follow what i'm pressing. This gets worse the more people are in the vicinity (even if they're not displayed). I think it also correlates with FPS, the lower the FPS, the more input lag i get.

 

If i can fix the input lag, i'd be set, so... The game works now, idk if i need to mess with DXVK or if Armored's package already has everything set up. I'll leave that for now.

 

But what about input lag? Where's that coming from and can i fix it?

 

All in all, off to a great start, the drivers seem to be working when i switched to AMDGPU, and well, if i can fix the lag, that would be great!

Link to comment
Share on other sites

47 minutes ago, Veprovina.4876 said:

Ok, of all the dumb problems i had ever, this as got to be the dumbest...

 

So, i installed PopOS, fresh install, updated it, the works.

Then i followed Armored's youtube video to set up the OS for the game.

Installed the game (just popped a backed up .dat file into the directory - screw downloading 50GB! lol) and of course, couldn't initialize 3D blah blah, as expected...

 

Then i did some digging...

 

Apparently (and i think this was the exact same issue in Ubuntu), Pop was using Radeon drivers instead of AMDGPU driver.

I followed a tutorial on how to change that, added some lines to grub, upadted grub and...

 

It just magically worked.

 

I tested Siren's landing, i get 40ish FPS there, very smooth, cities are at 25 fps and WvW is 20-ish at Medium settings lowest character limit. Which was about the same performance i had on WIndows with d912pxy, i wasn't expecting miracles and this is good enough for me! I know my system's limits and that GW2 isn't exactly super optimised.

 

The only thing i need to fix now is input lag.

I get input lag in WvW and while it's not in the "unplayable" levels, it's certainly very disorienting.

There's a slight delay between me stopping to press a key, and my character actually stopping. Same happens when i change directions, it takes a noticable amount of time for my character to follow what i'm pressing. This gets worse the more people are in the vicinity (even if they're not displayed). I think it also correlates with FPS, the lower the FPS, the more input lag i get.

 

If i can fix the input lag, i'd be set, so... The game works now, idk if i need to mess with DXVK or if Armored's package already has everything set up. I'll leave that for now.

 

But what about input lag? Where's that coming from and can i fix it?

 

All in all, off to a great start, the drivers seem to be working when i switched to AMDGPU, and well, if i can fix the lag, that would be great!

 

happy to hear you got it working! atleast we did the work earlier in isolating your issue prior issue regarding drivers and helped you make your new install a much smoother experience (after some minor tweaks)

 

as for input lag and delay, these can generally be reduced by turning off your desktop environment's compositor (google it!) and not using vsync when gaming. using performance patches like ESYNC, FSYNC and FSYNC2(FUTEX2) may help as well but these require a newer kernel (a custom one like XanMod that allows for these patches to run) and a wine build that has these patches.

 

wine-staging only comes with ESYNC. im not sure if the wine build armoredvehicle ships with his package includes these patches (ESYNC/FSYNC/FUTEX2) but lutris does ship with esync and fsync at the very least. if you want all the latest performance and game-specific patches you need to look at wine-tkg: https://github.com/Frogging-Family/wine-tkg-git

 

 

Edited by Astyrah.4015
Link to comment
Share on other sites

1 hour ago, Astyrah.4015 said:

 

happy to hear you got it working! atleast we did the work earlier in isolating your issue prior issue regarding drivers and helped you make your new install a much smoother experience (after some minor tweaks)

 

as for input lag and delay, these can generally be reduced by turning off your desktop environment's compositor (google it!) and not using vsync when gaming. using performance patches like ESYNC, FSYNC and FSYNC2(FUTEX2) may help as well but these require a newer kernel (a custom one like XanMod that allows for these patches to run) and a wine build that has these patches.

 

wine-staging only comes with ESYNC. im not sure if the wine build armoredvehicle ships with his package includes these patches (ESYNC/FSYNC/FUTEX2) but lutris does ship with esync and fsync at the very least. if you want all the latest performance and game-specific patches you need to look at wine-tkg: https://github.com/Frogging-Family/wine-tkg-git

 

 

 

I found one thread on reddit where it said to disable keyboard press repeat in system settings. I did that, and it seems to be working, no more input lag! I can't hold bakcspace to clear text anymore now lol, but oh well...

 

Ran into another weird issue though, i booted up the game and it ran at 3 FPS. Restarted it again and it ran fine but now the whenever i pressed the map, there was a huge FPS drop lol...

 

The mouse is a bit finnicky too, idk how to describe it.

 

Well, i'm going to continue testing tomorrow, it's late now. I'll see what else i can do to improve the overall experience.

 

Oh, and BTW, Pop OS is on the 5.11.0-7614-generic kernel, that's the newest one?

 

Link to comment
Share on other sites

13 minutes ago, Veprovina.4876 said:

 

Ran into another weird issue though, i booted up the game and it ran at 3 FPS. Restarted it again and it ran fine but now the whenever i pressed the map, there was a huge FPS drop lol...

 

 

a log output would certainly help to see behind the scenes why this happened. but i would just assume you're building up shader cache (especially if you changed the dxvk version to a newer one) --- but yeah, try to find out what causes this and reproduce it as reliably as you can

 

14 minutes ago, Veprovina.4876 said:

Oh, and BTW, Pop OS is on the 5.11.0-7614-generic kernel, that's the newest one?

 

oh that's good. it's a tad bit outdated (we're at 5.12 for the main build) but still relatively new. main/generic kernels only have ESYNC on them but that alone should be good enough of a performance boost for some games (if you're fine with it and it works, then that's good no need to touch it or change anything). custom kernels offer other experimental performance patches added in and generally tune your hardware with gaming or performance in mind.

 

19 minutes ago, Veprovina.4876 said:

Well, i'm going to continue testing tomorrow, it's late now. I'll see what else i can do to improve the overall experience.

 

good luck! 🙂

  • Like 1
Link to comment
Share on other sites

Ok, so... The game works now, but i have a few questions still.

 

EDIT3: Actually, just tried it. Again giving me 5 fps... Something's not working correctly.

 

How do i produce a log from running GW2?

 

I get this when running the ./play.sh command:

 

vepar@pop-os:~/GW2$ ./play.sh
esync: up and running.
Wine cannot find the ncurses library (libncurses.so.5).
*******************************************************************************
* WARNING: Unknown option RADV_PERFTEST='aco'. ACO is enabled by default now. *
*******************************************************************************
WARNING: radv is not a conformant vulkan implementation, testing use only.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.

 

Seems to be some errors still? What do the warnings mean?

Also.. Is vulkan using my AMDGPU driver or the llvmpipe? Can i check that? Cause with Lutris i could just enter HUD value to fps, and i'd know if it was using vulkan or not, but idk how to check that in the "manual" way).

 

Additionally... I seem to have Vulkan version 1.2.73 (i did nothing except install the Armored's package).

Is this ok? Or should i upgrade to the latest one? If so, how do i upgrade and make GW2 use it?

 

Here's the vulkaninfo --summary (double dash):

 

vepar@pop-os:~/GW2$ vulkaninfo --summary

vulkaninfo - Summarize Vulkan information in relation to the current environment.

USAGE: vulkaninfo [options]

OPTIONS:
-h, --help            Print this help.
--html                Produce an html version of vulkaninfo output, saved as
                      "vulkaninfo.html" in the directory in which the command is
                      run.
-j, --json            Produce a json version of vulkaninfo to standard output of the
                      first gpu in the system conforming to the DevSim schema.
--json=<gpu-number>   For a multi-gpu system, a single gpu can be targetted by
                      specifying the gpu-number associated with the gpu of 
                      interest. This number can be determined by running
                      vulkaninfo without any options specified.
--show-formats        Display the format properties of each physical device.
                      Note: This option does not affect html or json output;
                      they will always print format properties.

 

I have no idea why it doesn't work so here's the longer vulkaninfo (I'm sorry, --summary doesn't work):

 

vepar@pop-os:~/GW2$ vulkaninfo
ERROR: [Loader Message] Code 0 : /usr/lib/i386-linux-gnu/libvulkan_radeon.so: wrong ELF class: ELFCLASS32
ERROR: [Loader Message] Code 0 : /usr/lib/i386-linux-gnu/libvulkan_intel.so: wrong ELF class: ELFCLASS32
ERROR: [Loader Message] Code 0 : /usr/lib/i386-linux-gnu/libvulkan_lvp.so: wrong ELF class: ELFCLASS32
WARNING: radv is not a conformant vulkan implementation, testing use only.
WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
==========
VULKANINFO
==========

Vulkan Instance Version: 1.2.141


Instance Extensions: count = 18
===============================
	VK_EXT_acquire_xlib_display            : extension revision 1
	VK_EXT_debug_report                    : extension revision 9
	VK_EXT_debug_utils                     : extension revision 2
	VK_EXT_direct_mode_display             : extension revision 1
	VK_EXT_display_surface_counter         : extension revision 1
	VK_KHR_device_group_creation           : extension revision 1
	VK_KHR_display                         : extension revision 23
	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_display_properties2         : 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_surface_protected_capabilities  : extension revision 1
	VK_KHR_wayland_surface                 : extension revision 6
	VK_KHR_xcb_surface                     : extension revision 6
	VK_KHR_xlib_surface                    : extension revision 6

Layers: count = 2
=================
VK_LAYER_MESA_device_select (Linux device selection layer) Vulkan version 1.2.73, layer version 1:
	Layer Extensions: count = 0
	Devices: count = 2
		GPU id = 0 (AMD RADV BONAIRE (ACO))
		Layer-Device Extensions: count = 0

		GPU id = 1 (llvmpipe (LLVM 11.0.0, 128 bits))
		Layer-Device Extensions: count = 0

VK_LAYER_MESA_overlay (Mesa Overlay layer) Vulkan version 1.1.73, layer version 1:
	Layer Extensions: count = 0
	Devices: count = 2
		GPU id = 0 (AMD RADV BONAIRE (ACO))
		Layer-Device Extensions: count = 0

		GPU id = 1 (llvmpipe (LLVM 11.0.0, 128 bits))
		Layer-Device Extensions: count = 0

Presentable Surfaces:
=====================
GPU id : 0 (AMD RADV BONAIRE (ACO)):
	Surface types: count = 2
		VK_KHR_xcb_surface
		VK_KHR_xlib_surface
	Formats: count = 2
		SurfaceFormat[0]:
			format = FORMAT_B8G8R8A8_SRGB
			colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
		SurfaceFormat[1]:
			format = FORMAT_B8G8R8A8_UNORM
			colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
	Present Modes: count = 4
		PRESENT_MODE_IMMEDIATE_KHR
		PRESENT_MODE_MAILBOX_KHR
		PRESENT_MODE_FIFO_KHR
		PRESENT_MODE_FIFO_RELAXED_KHR
	VkSurfaceCapabilitiesKHR:
	-------------------------
		minImageCount       = 3
		maxImageCount       = 0
		currentExtent:
			width  = 256
			height = 256
		minImageExtent:
			width  = 256
			height = 256
		maxImageExtent:
			width  = 256
			height = 256
		maxImageArrayLayers = 1
		supportedTransforms: count = 1
			SURFACE_TRANSFORM_IDENTITY_BIT_KHR
		currentTransform    = SURFACE_TRANSFORM_IDENTITY_BIT_KHR
		supportedCompositeAlpha: count = 2
			COMPOSITE_ALPHA_OPAQUE_BIT_KHR
			COMPOSITE_ALPHA_INHERIT_BIT_KHR
		supportedUsageFlags: count = 5
			IMAGE_USAGE_TRANSFER_SRC_BIT
			IMAGE_USAGE_TRANSFER_DST_BIT
			IMAGE_USAGE_SAMPLED_BIT
			IMAGE_USAGE_STORAGE_BIT
			IMAGE_USAGE_COLOR_ATTACHMENT_BIT
	VkSurfaceCapabilities2EXT:
	--------------------------
		supportedSurfaceCounters: count = 0
			None
	VkSurfaceProtectedCapabilitiesKHR:
	----------------------------------
		supportsProtected = false


GPU id : 1 (llvmpipe (LLVM 11.0.0, 128 bits)):
	Surface types: count = 2
		VK_KHR_xcb_surface
		VK_KHR_xlib_surface
	Formats: count = 2
		SurfaceFormat[0]:
			format = FORMAT_B8G8R8A8_SRGB
			colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
		SurfaceFormat[1]:
			format = FORMAT_B8G8R8A8_UNORM
			colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
	Present Modes: count = 4
		PRESENT_MODE_IMMEDIATE_KHR
		PRESENT_MODE_MAILBOX_KHR
		PRESENT_MODE_FIFO_KHR
		PRESENT_MODE_FIFO_RELAXED_KHR
	VkSurfaceCapabilitiesKHR:
	-------------------------
		minImageCount       = 3
		maxImageCount       = 0
		currentExtent:
			width  = 256
			height = 256
		minImageExtent:
			width  = 256
			height = 256
		maxImageExtent:
			width  = 256
			height = 256
		maxImageArrayLayers = 1
		supportedTransforms: count = 1
			SURFACE_TRANSFORM_IDENTITY_BIT_KHR
		currentTransform    = SURFACE_TRANSFORM_IDENTITY_BIT_KHR
		supportedCompositeAlpha: count = 2
			COMPOSITE_ALPHA_OPAQUE_BIT_KHR
			COMPOSITE_ALPHA_INHERIT_BIT_KHR
		supportedUsageFlags: count = 5
			IMAGE_USAGE_TRANSFER_SRC_BIT
			IMAGE_USAGE_TRANSFER_DST_BIT
			IMAGE_USAGE_SAMPLED_BIT
			IMAGE_USAGE_STORAGE_BIT
			IMAGE_USAGE_COLOR_ATTACHMENT_BIT
	VkSurfaceCapabilities2EXT:
	--------------------------
		supportedSurfaceCounters: count = 0
			None
	VkSurfaceProtectedCapabilitiesKHR:
	----------------------------------
		supportsProtected = false



Device Groups:
==============
Group 0:
	Properties:
		physicalDevices: count = 1
			AMD RADV BONAIRE (ACO) (ID: 0)
		subsetAllocation = 0

	Present Capabilities:
		AMD RADV BONAIRE (ACO) (ID: 0):
			Can present images from the following devices: count = 1
				AMD RADV BONAIRE (ACO) (ID: 0)
		Present modes: count = 1
			DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR

Group 1:
	Properties:
		physicalDevices: count = 1
			llvmpipe (LLVM 11.0.0, 128 bits) (ID: 0)
		subsetAllocation = 0

WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
	Present Capabilities:
		llvmpipe (LLVM 11.0.0, 128 bits) (ID: 0):
			Can present images from the following devices: count = 1
				llvmpipe (LLVM 11.0.0, 128 bits) (ID: 0)
		Present modes: count = 1
			DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR


Device Properties and Extensions:
=================================
GPU0:
VkPhysicalDeviceProperties:
---------------------------
	apiVersion     = 4202641 (1.2.145)
	driverVersion  = 88080384 (0x5400000)
	vendorID       = 0x1002
	deviceID       = 0x6658
	deviceType     = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
	deviceName     = AMD RADV BONAIRE (ACO)

VkPhysicalDeviceLimits:
-----------------------
	maxImageDimension1D                             = 16384
	maxImageDimension2D                             = 16384
	maxImageDimension3D                             = 2048
	maxImageDimensionCube                           = 16384
	maxImageArrayLayers                             = 2048
	maxTexelBufferElements                          = 4294967295
	maxUniformBufferRange                           = 4294967295
	maxStorageBufferRange                           = 4294967295
	maxPushConstantsSize                            = 128
	maxMemoryAllocationCount                        = 4294967295
	maxSamplerAllocationCount                       = 65536
	bufferImageGranularity                          = 0x00000040
	sparseAddressSpaceSize                          = 0xfffffffc
	maxBoundDescriptorSets                          = 32
	maxPerStageDescriptorSamplers                   = 8388606
	maxPerStageDescriptorUniformBuffers             = 8388606
	maxPerStageDescriptorStorageBuffers             = 8388606
	maxPerStageDescriptorSampledImages              = 8388606
	maxPerStageDescriptorStorageImages              = 8388606
	maxPerStageDescriptorInputAttachments           = 8388606
	maxPerStageResources                            = 8388606
	maxDescriptorSetSamplers                        = 8388606
	maxDescriptorSetUniformBuffers                  = 8388606
	maxDescriptorSetUniformBuffersDynamic           = 16
	maxDescriptorSetStorageBuffers                  = 8388606
	maxDescriptorSetStorageBuffersDynamic           = 8
	maxDescriptorSetSampledImages                   = 8388606
	maxDescriptorSetStorageImages                   = 8388606
	maxDescriptorSetInputAttachments                = 8388606
	maxVertexInputAttributes                        = 32
	maxVertexInputBindings                          = 32
	maxVertexInputAttributeOffset                   = 2047
	maxVertexInputBindingStride                     = 2048
	maxVertexOutputComponents                       = 128
	maxTessellationGenerationLevel                  = 64
	maxTessellationPatchSize                        = 32
	maxTessellationControlPerVertexInputComponents  = 128
	maxTessellationControlPerVertexOutputComponents = 128
	maxTessellationControlPerPatchOutputComponents  = 120
	maxTessellationControlTotalOutputComponents     = 4096
	maxTessellationEvaluationInputComponents        = 128
	maxTessellationEvaluationOutputComponents       = 128
	maxGeometryShaderInvocations                    = 127
	maxGeometryInputComponents                      = 64
	maxGeometryOutputComponents                     = 128
	maxGeometryOutputVertices                       = 256
	maxGeometryTotalOutputComponents                = 1024
	maxFragmentInputComponents                      = 128
	maxFragmentOutputAttachments                    = 8
	maxFragmentDualSrcAttachments                   = 1
	maxFragmentCombinedOutputResources              = 8
	maxComputeSharedMemorySize                      = 32768
	maxComputeWorkGroupCount: count = 3
		65535
		65535
		65535
	maxComputeWorkGroupInvocations                  = 1024
	maxComputeWorkGroupSize: count = 3
		1024
		1024
		1024
	subPixelPrecisionBits                           = 8
	subTexelPrecisionBits                           = 8
	mipmapPrecisionBits                             = 8
	maxDrawIndexedIndexValue                        = 4294967295
	maxDrawIndirectCount                            = 4294967295
	maxSamplerLodBias                               = 16
	maxSamplerAnisotropy                            = 16
	maxViewports                                    = 16
	maxViewportDimensions: count = 2
		16384
		16384
	viewportBoundsRange: count = 2
		-32768
		32767
	viewportSubPixelBits                            = 8
	minMemoryMapAlignment                           = 4096
	minTexelBufferOffsetAlignment                   = 0x00000004
	minUniformBufferOffsetAlignment                 = 0x00000004
	minStorageBufferOffsetAlignment                 = 0x00000004
	minTexelOffset                                  = -32
	maxTexelOffset                                  = 31
	minTexelGatherOffset                            = -32
	maxTexelGatherOffset                            = 31
	minInterpolationOffset                          = -2
	maxInterpolationOffset                          = 2
	subPixelInterpolationOffsetBits                 = 8
	maxFramebufferWidth                             = 16384
	maxFramebufferHeight                            = 16384
	maxFramebufferLayers                            = 1024
	framebufferColorSampleCounts: count = 4
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_2_BIT
		SAMPLE_COUNT_4_BIT
		SAMPLE_COUNT_8_BIT
	framebufferDepthSampleCounts: count = 4
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_2_BIT
		SAMPLE_COUNT_4_BIT
		SAMPLE_COUNT_8_BIT
	framebufferStencilSampleCounts: count = 4
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_2_BIT
		SAMPLE_COUNT_4_BIT
		SAMPLE_COUNT_8_BIT
	framebufferNoAttachmentsSampleCounts: count = 4
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_2_BIT
		SAMPLE_COUNT_4_BIT
		SAMPLE_COUNT_8_BIT
	maxColorAttachments                             = 8
	sampledImageColorSampleCounts: count = 4
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_2_BIT
		SAMPLE_COUNT_4_BIT
		SAMPLE_COUNT_8_BIT
	sampledImageIntegerSampleCounts: count = 4
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_2_BIT
		SAMPLE_COUNT_4_BIT
		SAMPLE_COUNT_8_BIT
	sampledImageDepthSampleCounts: count = 4
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_2_BIT
		SAMPLE_COUNT_4_BIT
		SAMPLE_COUNT_8_BIT
	sampledImageStencilSampleCounts: count = 4
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_2_BIT
		SAMPLE_COUNT_4_BIT
		SAMPLE_COUNT_8_BIT
	storageImageSampleCounts: count = 4
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_2_BIT
		SAMPLE_COUNT_4_BIT
		SAMPLE_COUNT_8_BIT
	maxSampleMaskWords                              = 1
	timestampComputeAndGraphics                     = true
	timestampPeriod                                 = 37.037
	maxClipDistances                                = 8
	maxCullDistances                                = 8
	maxCombinedClipAndCullDistances                 = 8
	discreteQueuePriorities                         = 2
	pointSizeRange: count = 2
		0
		8191.88
	lineWidthRange: count = 2
		0
		8191.88
	pointSizeGranularity                            = 0.125
	lineWidthGranularity                            = 0.125
	strictLines                                     = false
	standardSampleLocations                         = true
	optimalBufferCopyOffsetAlignment                = 0x00000080
	optimalBufferCopyRowPitchAlignment              = 0x00000080
	nonCoherentAtomSize                             = 0x00000040

VkPhysicalDeviceSparseProperties:
---------------------------------
	residencyStandard2DBlockShape            = false
	residencyStandard2DMultisampleBlockShape = false
	residencyStandard3DBlockShape            = false
	residencyAlignedMipSize                  = false
	residencyNonResidentStrict               = false

VkPhysicalDeviceCustomBorderColorPropertiesEXT:
-----------------------------------------------
	maxCustomBorderColorSamplers = 4096

VkPhysicalDeviceDepthStencilResolveProperties:
----------------------------------------------
	supportedDepthResolveModes: count = 4
		RESOLVE_MODE_SAMPLE_ZERO_BIT
		RESOLVE_MODE_AVERAGE_BIT
		RESOLVE_MODE_MIN_BIT
		RESOLVE_MODE_MAX_BIT
	supportedStencilResolveModes: count = 3
		RESOLVE_MODE_SAMPLE_ZERO_BIT
		RESOLVE_MODE_MIN_BIT
		RESOLVE_MODE_MAX_BIT
	independentResolveNone = true
	independentResolve     = true

VkPhysicalDeviceDescriptorIndexingProperties:
---------------------------------------------
	maxUpdateAfterBindDescriptorsInAllPools              = 67108863
	shaderUniformBufferArrayNonUniformIndexingNative     = false
	shaderSampledImageArrayNonUniformIndexingNative      = false
	shaderStorageBufferArrayNonUniformIndexingNative     = false
	shaderStorageImageArrayNonUniformIndexingNative      = false
	shaderInputAttachmentArrayNonUniformIndexingNative   = false
	robustBufferAccessUpdateAfterBind                    = true
	quadDivergentImplicitLod                             = false
	maxPerStageDescriptorUpdateAfterBindSamplers         = 8388606
	maxPerStageDescriptorUpdateAfterBindUniformBuffers   = 8388606
	maxPerStageDescriptorUpdateAfterBindStorageBuffers   = 8388606
	maxPerStageDescriptorUpdateAfterBindSampledImages    = 8388606
	maxPerStageDescriptorUpdateAfterBindStorageImages    = 8388606
	maxPerStageDescriptorUpdateAfterBindInputAttachments = 8388606
	maxPerStageUpdateAfterBindResources                  = 8388606
	maxDescriptorSetUpdateAfterBindSamplers              = 8388606
	maxDescriptorSetUpdateAfterBindUniformBuffers        = 8388606
	maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 16
	maxDescriptorSetUpdateAfterBindStorageBuffers        = 8388606
	maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 8
	maxDescriptorSetUpdateAfterBindSampledImages         = 8388606
	maxDescriptorSetUpdateAfterBindStorageImages         = 8388606
	maxDescriptorSetUpdateAfterBindInputAttachments      = 8388606

VkPhysicalDeviceDiscardRectanglePropertiesEXT:
----------------------------------------------
	maxDiscardRectangles = 4

VkPhysicalDeviceDriverProperties:
---------------------------------
	driverID           = DRIVER_ID_MESA_RADV
	driverName         = radv
	driverInfo         = Mesa 21.0.0 (ACO)
	conformanceVersion = 1.2.3.0

VkPhysicalDeviceExternalMemoryHostPropertiesEXT:
------------------------------------------------
	minImportedHostPointerAlignment = 0x00001000

VkPhysicalDeviceFloatControlsProperties:
----------------------------------------
	denormBehaviorIndependence            = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
	roundingModeIndependence              = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
	shaderSignedZeroInfNanPreserveFloat16 = false
	shaderSignedZeroInfNanPreserveFloat32 = true
	shaderSignedZeroInfNanPreserveFloat64 = false
	shaderDenormPreserveFloat16           = false
	shaderDenormPreserveFloat32           = true
	shaderDenormPreserveFloat64           = false
	shaderDenormFlushToZeroFloat16        = false
	shaderDenormFlushToZeroFloat32        = true
	shaderDenormFlushToZeroFloat64        = false
	shaderRoundingModeRTEFloat16          = false
	shaderRoundingModeRTEFloat32          = true
	shaderRoundingModeRTEFloat64          = false
	shaderRoundingModeRTZFloat16          = false
	shaderRoundingModeRTZFloat32          = true
	shaderRoundingModeRTZFloat64          = false

VkPhysicalDeviceIDProperties:
-----------------------------
	deviceUUID      = 00000000-0100-0000-0000-000000000000
	driverUUID      = 414d442d-4d45-5341-2d44-525600000000
	deviceNodeMask  = 0
	deviceLUIDValid = false

VkPhysicalDeviceInlineUniformBlockPropertiesEXT:
------------------------------------------------
	maxInlineUniformBlockSize                               = 4194304
	maxPerStageDescriptorInlineUniformBlocks                = 134217728
	maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = 134217728
	maxDescriptorSetInlineUniformBlocks                     = 64
	maxDescriptorSetUpdateAfterBindInlineUniformBlocks      = 64

VkPhysicalDeviceLineRasterizationPropertiesEXT:
-----------------------------------------------
	lineSubPixelPrecisionBits = 4

VkPhysicalDeviceMaintenance3Properties:
---------------------------------------
	maxPerSetDescriptors    = 22369621
	maxMemoryAllocationSize = 0xfffffffc

VkPhysicalDeviceMultiviewProperties:
------------------------------------
	maxMultiviewViewCount     = 8
	maxMultiviewInstanceIndex = 2147483647

VkPhysicalDevicePCIBusInfoPropertiesEXT:
----------------------------------------
	pciDomain   = 0
	pciBus      = 1
	pciDevice   = 0
	pciFunction = 0

VkPhysicalDevicePointClippingProperties:
----------------------------------------
	pointClippingBehavior = POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES

VkPhysicalDeviceProtectedMemoryProperties:
------------------------------------------
	protectedNoFault = false

VkPhysicalDevicePushDescriptorPropertiesKHR:
--------------------------------------------
	maxPushDescriptors = 32

VkPhysicalDeviceRobustness2PropertiesEXT:
-----------------------------------------
	robustStorageBufferAccessSizeAlignment = 0x00000004
	robustUniformBufferAccessSizeAlignment = 0x00000004

VkPhysicalDeviceSampleLocationsPropertiesEXT:
---------------------------------------------
	sampleLocationSampleCounts: count = 3
		SAMPLE_COUNT_2_BIT
		SAMPLE_COUNT_4_BIT
		SAMPLE_COUNT_8_BIT
	maxSampleLocationGridSize:
		width  = 2
		height = 2
	sampleLocationCoordinateRange: count = 2
		0
		0.9375
	sampleLocationSubPixelBits       = 4
	variableSampleLocations          = false

VkPhysicalDeviceSamplerFilterMinmaxProperties:
----------------------------------------------
	filterMinmaxSingleComponentFormats = true
	filterMinmaxImageComponentMapping  = false

VkPhysicalDeviceSubgroupProperties:
-----------------------------------
	subgroupSize              = 64
	supportedStages: count = 8
		SHADER_STAGE_VERTEX_BIT
		SHADER_STAGE_TESSELLATION_CONTROL_BIT
		SHADER_STAGE_TESSELLATION_EVALUATION_BIT
		SHADER_STAGE_GEOMETRY_BIT
		SHADER_STAGE_FRAGMENT_BIT
		SHADER_STAGE_COMPUTE_BIT
		SHADER_STAGE_ALL_GRAPHICS
		SHADER_STAGE_ALL
	supportedOperations: count = 8
		SUBGROUP_FEATURE_BASIC_BIT
		SUBGROUP_FEATURE_VOTE_BIT
		SUBGROUP_FEATURE_ARITHMETIC_BIT
		SUBGROUP_FEATURE_BALLOT_BIT
		SUBGROUP_FEATURE_SHUFFLE_BIT
		SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT
		SUBGROUP_FEATURE_CLUSTERED_BIT
		SUBGROUP_FEATURE_QUAD_BIT
	quadOperationsInAllStages = true

VkPhysicalDeviceSubgroupSizeControlPropertiesEXT:
-------------------------------------------------
	minSubgroupSize              = 64
	maxSubgroupSize              = 64
	maxComputeWorkgroupSubgroups = 4294967295
	requiredSubgroupSizeStages: count = 0
		None

VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT:
--------------------------------------------------
	storageTexelBufferOffsetAlignmentBytes       = 0x00000004
	storageTexelBufferOffsetSingleTexelAlignment = true
	uniformTexelBufferOffsetAlignmentBytes       = 0x00000004
	uniformTexelBufferOffsetSingleTexelAlignment = true

VkPhysicalDeviceTimelineSemaphoreProperties:
--------------------------------------------
	maxTimelineSemaphoreValueDifference = 18446744073709551615

VkPhysicalDeviceTransformFeedbackPropertiesEXT:
-----------------------------------------------
	maxTransformFeedbackStreams                = 4
	maxTransformFeedbackBuffers                = 4
	maxTransformFeedbackBufferSize             = 0xffffffff
	maxTransformFeedbackStreamDataSize         = 512
	maxTransformFeedbackBufferDataSize         = 512
	maxTransformFeedbackBufferDataStride       = 512
	transformFeedbackQueries                   = true
	transformFeedbackStreamsLinesTriangles     = true
	transformFeedbackRasterizationStreamSelect = false
	transformFeedbackDraw                      = true

VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT:
----------------------------------------------------
	maxVertexAttribDivisor = 4294967295

VkPhysicalDeviceVulkan11Properties:
-----------------------------------
	deviceUUID                        = 00000000-0100-0000-0000-000000000000
	driverUUID                        = 414d442d-4d45-5341-2d44-525600000000
	deviceNodeMask                    = 0
	deviceLUIDValid                   = false
	subgroupSize                      = 64
	subgroupSupportedStages: count = 8
		SHADER_STAGE_VERTEX_BIT
		SHADER_STAGE_TESSELLATION_CONTROL_BIT
		SHADER_STAGE_TESSELLATION_EVALUATION_BIT
		SHADER_STAGE_GEOMETRY_BIT
		SHADER_STAGE_FRAGMENT_BIT
		SHADER_STAGE_COMPUTE_BIT
		SHADER_STAGE_ALL_GRAPHICS
		SHADER_STAGE_ALL
	subgroupSupportedOperations: count = 8
		SUBGROUP_FEATURE_BASIC_BIT
		SUBGROUP_FEATURE_VOTE_BIT
		SUBGROUP_FEATURE_ARITHMETIC_BIT
		SUBGROUP_FEATURE_BALLOT_BIT
		SUBGROUP_FEATURE_SHUFFLE_BIT
		SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT
		SUBGROUP_FEATURE_CLUSTERED_BIT
		SUBGROUP_FEATURE_QUAD_BIT
	subgroupQuadOperationsInAllStages = true
	pointClippingBehavior             = POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES
	maxMultiviewViewCount             = 8
	maxMultiviewInstanceIndex         = 2147483647
	protectedNoFault                  = false
	maxPerSetDescriptors              = 22369621
	maxMemoryAllocationSize           = 0xfffffffc

VkPhysicalDeviceVulkan12Properties:
-----------------------------------
	driverID                                             = DRIVER_ID_MESA_RADV
	driverName                                           = radv
	driverInfo                                           = Mesa 21.0.0 (ACO)
	conformanceVersion                                   = 1.2.3.0
	denormBehaviorIndependence                           = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
	roundingModeIndependence                             = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
	shaderSignedZeroInfNanPreserveFloat16                = false
	shaderSignedZeroInfNanPreserveFloat32                = true
	shaderSignedZeroInfNanPreserveFloat64                = false
	shaderDenormPreserveFloat16                          = false
	shaderDenormPreserveFloat32                          = true
	shaderDenormPreserveFloat64                          = false
	shaderDenormFlushToZeroFloat16                       = false
	shaderDenormFlushToZeroFloat32                       = true
	shaderDenormFlushToZeroFloat64                       = false
	shaderRoundingModeRTEFloat16                         = false
	shaderRoundingModeRTEFloat32                         = true
	shaderRoundingModeRTEFloat64                         = false
	shaderRoundingModeRTZFloat16                         = false
	shaderRoundingModeRTZFloat32                         = true
	shaderRoundingModeRTZFloat64                         = false
	maxUpdateAfterBindDescriptorsInAllPools              = 67108863
	shaderUniformBufferArrayNonUniformIndexingNative     = false
	shaderSampledImageArrayNonUniformIndexingNative      = false
	shaderStorageBufferArrayNonUniformIndexingNative     = false
	shaderStorageImageArrayNonUniformIndexingNative      = false
	shaderInputAttachmentArrayNonUniformIndexingNative   = false
	robustBufferAccessUpdateAfterBind                    = true
	quadDivergentImplicitLod                             = false
	maxPerStageDescriptorUpdateAfterBindSamplers         = 8388606
	maxPerStageDescriptorUpdateAfterBindUniformBuffers   = 8388606
	maxPerStageDescriptorUpdateAfterBindStorageBuffers   = 8388606
	maxPerStageDescriptorUpdateAfterBindSampledImages    = 8388606
	maxPerStageDescriptorUpdateAfterBindStorageImages    = 8388606
	maxPerStageDescriptorUpdateAfterBindInputAttachments = 8388606
	maxPerStageUpdateAfterBindResources                  = 8388606
	maxDescriptorSetUpdateAfterBindSamplers              = 8388606
	maxDescriptorSetUpdateAfterBindUniformBuffers        = 8388606
	maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 16
	maxDescriptorSetUpdateAfterBindStorageBuffers        = 8388606
	maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 8
	maxDescriptorSetUpdateAfterBindSampledImages         = 8388606
	maxDescriptorSetUpdateAfterBindStorageImages         = 8388606
	maxDescriptorSetUpdateAfterBindInputAttachments      = 8388606
	supportedDepthResolveModes: count = 4
		RESOLVE_MODE_SAMPLE_ZERO_BIT
		RESOLVE_MODE_AVERAGE_BIT
		RESOLVE_MODE_MIN_BIT
		RESOLVE_MODE_MAX_BIT
	supportedStencilResolveModes: count = 3
		RESOLVE_MODE_SAMPLE_ZERO_BIT
		RESOLVE_MODE_MIN_BIT
		RESOLVE_MODE_MAX_BIT
	independentResolveNone                               = true
	independentResolve                                   = true
	filterMinmaxSingleComponentFormats                   = true
	filterMinmaxImageComponentMapping                    = false
	maxTimelineSemaphoreValueDifference                  = 18446744073709551615
	framebufferIntegerColorSampleCounts: count = 1
		SAMPLE_COUNT_1_BIT


Device Extensions: count = 109
	VK_AMD_buffer_marker                      : extension revision 1
	VK_AMD_device_coherent_memory             : extension revision 1
	VK_AMD_draw_indirect_count                : extension revision 2
	VK_AMD_gcn_shader                         : extension revision 1
	VK_AMD_memory_overallocation_behavior     : extension revision 1
	VK_AMD_mixed_attachment_samples           : extension revision 1
	VK_AMD_shader_ballot                      : extension revision 1
	VK_AMD_shader_core_properties             : extension revision 2
	VK_AMD_shader_core_properties2            : extension revision 1
	VK_AMD_shader_explicit_vertex_parameter   : extension revision 1
	VK_AMD_shader_fragment_mask               : extension revision 1
	VK_AMD_shader_image_load_store_lod        : extension revision 1
	VK_AMD_shader_info                        : extension revision 1
	VK_AMD_shader_trinary_minmax              : extension revision 1
	VK_AMD_texture_gather_bias_lod            : extension revision 1
	VK_EXT_4444_formats                       : extension revision 1
	VK_EXT_buffer_device_address              : extension revision 2
	VK_EXT_calibrated_timestamps              : extension revision 1
	VK_EXT_conditional_rendering              : extension revision 2
	VK_EXT_custom_border_color                : extension revision 12
	VK_EXT_depth_clip_enable                  : extension revision 1
	VK_EXT_depth_range_unrestricted           : extension revision 1
	VK_EXT_descriptor_indexing                : extension revision 2
	VK_EXT_discard_rectangles                 : extension revision 1
	VK_EXT_display_control                    : extension revision 1
	VK_EXT_extended_dynamic_state             : extension revision 1
	VK_EXT_external_memory_dma_buf            : extension revision 1
	VK_EXT_external_memory_host               : extension revision 1
	VK_EXT_global_priority                    : extension revision 2
	VK_EXT_host_query_reset                   : extension revision 1
	VK_EXT_image_robustness                   : extension revision 1
	VK_EXT_inline_uniform_block               : extension revision 1
	VK_EXT_line_rasterization                 : extension revision 1
	VK_EXT_memory_budget                      : extension revision 1
	VK_EXT_memory_priority                    : extension revision 1
	VK_EXT_pci_bus_info                       : extension revision 2
	VK_EXT_pipeline_creation_cache_control    : extension revision 3
	VK_EXT_pipeline_creation_feedback         : extension revision 1
	VK_EXT_private_data                       : extension revision 1
	VK_EXT_queue_family_foreign               : extension revision 1
	VK_EXT_robustness2                        : extension revision 1
	VK_EXT_sample_locations                   : extension revision 1
	VK_EXT_sampler_filter_minmax              : extension revision 2
	VK_EXT_scalar_block_layout                : extension revision 1
	VK_EXT_shader_atomic_float                : extension revision 1
	VK_EXT_shader_demote_to_helper_invocation : extension revision 1
	VK_EXT_shader_image_atomic_int64          : extension revision 1
	VK_EXT_shader_stencil_export              : extension revision 1
	VK_EXT_shader_subgroup_ballot             : extension revision 1
	VK_EXT_shader_subgroup_vote               : extension revision 1
	VK_EXT_shader_viewport_index_layer        : extension revision 1
	VK_EXT_subgroup_size_control              : extension revision 2
	VK_EXT_texel_buffer_alignment             : extension revision 1
	VK_EXT_transform_feedback                 : extension revision 1
	VK_EXT_vertex_attribute_divisor           : extension revision 3
	VK_EXT_ycbcr_image_arrays                 : extension revision 1
	VK_GOOGLE_decorate_string                 : extension revision 1
	VK_GOOGLE_hlsl_functionality1             : extension revision 1
	VK_GOOGLE_user_type                       : extension revision 1
	VK_KHR_16bit_storage                      : extension revision 1
	VK_KHR_8bit_storage                       : extension revision 1
	VK_KHR_bind_memory2                       : extension revision 1
	VK_KHR_buffer_device_address              : extension revision 1
	VK_KHR_copy_commands2                     : extension revision 1
	VK_KHR_create_renderpass2                 : extension revision 1
	VK_KHR_dedicated_allocation               : extension revision 3
	VK_KHR_depth_stencil_resolve              : extension revision 1
	VK_KHR_descriptor_update_template         : extension revision 1
	VK_KHR_device_group                       : extension revision 4
	VK_KHR_draw_indirect_count                : extension revision 1
	VK_KHR_driver_properties                  : extension revision 1
	VK_KHR_external_fence                     : extension revision 1
	VK_KHR_external_fence_fd                  : 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_imageless_framebuffer              : extension revision 1
	VK_KHR_incremental_present                : extension revision 1
	VK_KHR_maintenance1                       : extension revision 2
	VK_KHR_maintenance2                       : extension revision 1
	VK_KHR_maintenance3                       : extension revision 1
	VK_KHR_multiview                          : extension revision 1
	VK_KHR_pipeline_executable_properties     : extension revision 1
	VK_KHR_push_descriptor                    : extension revision 2
	VK_KHR_relaxed_block_layout               : extension revision 1
	VK_KHR_sampler_mirror_clamp_to_edge       : extension revision 3
	VK_KHR_sampler_ycbcr_conversion           : extension revision 14
	VK_KHR_separate_depth_stencil_layouts     : extension revision 1
	VK_KHR_shader_atomic_int64                : extension revision 1
	VK_KHR_shader_clock                       : extension revision 1
	VK_KHR_shader_draw_parameters             : extension revision 1
	VK_KHR_shader_float16_int8                : extension revision 1
	VK_KHR_shader_float_controls              : extension revision 4
	VK_KHR_shader_non_semantic_info           : extension revision 1
	VK_KHR_shader_subgroup_extended_types     : extension revision 1
	VK_KHR_shader_terminate_invocation        : extension revision 1
	VK_KHR_spirv_1_4                          : extension revision 1
	VK_KHR_storage_buffer_storage_class       : extension revision 1
	VK_KHR_swapchain                          : extension revision 70
	VK_KHR_swapchain_mutable_format           : extension revision 1
	VK_KHR_timeline_semaphore                 : extension revision 2
	VK_KHR_uniform_buffer_standard_layout     : extension revision 1
	VK_KHR_variable_pointers                  : extension revision 1
	VK_KHR_vulkan_memory_model                : extension revision 3
	VK_NV_compute_shader_derivatives          : extension revision 1
	VK_VALVE_mutable_descriptor_type          : extension revision 1

VkQueueFamilyProperties:
========================
	queueProperties[0]:
	-------------------
		minImageTransferGranularity = (1,1,1)
		queueCount                  = 1
		queueFlags                  = QUEUE_GRAPHICS | QUEUE_COMPUTE | QUEUE_TRANSFER | QUEUE_SPARSE_BINDING
		timestampValidBits          = 64
		present support             = true

	queueProperties[1]:
	-------------------
		minImageTransferGranularity = (1,1,1)
		queueCount                  = 4
		queueFlags                  = QUEUE_COMPUTE | QUEUE_TRANSFER | QUEUE_SPARSE_BINDING
		timestampValidBits          = 64
		present support             = true

VkPhysicalDeviceMemoryProperties:
=================================
memoryHeaps: count = 3
	memoryHeaps[0]:
		size   = 805306368 (0x30000000) (768.00 MiB)
		budget = 15314944 (0x00e9b000) (14.61 MiB)
		usage  = 0 (0x00000000) (0.00 B)
		flags: count = 1
			MEMORY_HEAP_DEVICE_LOCAL_BIT
	memoryHeaps[1]:
		size   = 3221225472 (0xc0000000) (3.00 GiB)
		budget = 3024375808 (0xb4445000) (2.82 GiB)
		usage  = 0 (0x00000000) (0.00 B)
		flags: count = 0
			None
	memoryHeaps[2]:
		size   = 268435456 (0x10000000) (256.00 MiB)
		budget = 177426432 (0x0a935000) (169.21 MiB)
		usage  = 0 (0x00000000) (0.00 B)
		flags: count = 1
			MEMORY_HEAP_DEVICE_LOCAL_BIT
memoryTypes: count = 4
	memoryTypes[0]:
		heapIndex     = 0
		propertyFlags = 0x0001: count = 1
			MEMORY_PROPERTY_DEVICE_LOCAL_BIT
		usable for:
			IMAGE_TILING_OPTIMAL:
				color images
				FORMAT_D16_UNORM
				FORMAT_D32_SFLOAT
				FORMAT_S8_UINT
				FORMAT_D16_UNORM_S8_UINT
				FORMAT_D32_SFLOAT_S8_UINT
				(non-sparse)
			IMAGE_TILING_LINEAR:
				color images
				(non-sparse)
	memoryTypes[1]:
		heapIndex     = 1
		propertyFlags = 0x0006: count = 2
			MEMORY_PROPERTY_HOST_VISIBLE_BIT
			MEMORY_PROPERTY_HOST_COHERENT_BIT
		usable for:
			IMAGE_TILING_OPTIMAL:
				color images
				FORMAT_D16_UNORM
				FORMAT_D32_SFLOAT
				FORMAT_S8_UINT
				FORMAT_D16_UNORM_S8_UINT
				FORMAT_D32_SFLOAT_S8_UINT
				(non-sparse)
			IMAGE_TILING_LINEAR:
				color images
				(non-sparse)
	memoryTypes[2]:
		heapIndex     = 2
		propertyFlags = 0x0007: count = 3
			MEMORY_PROPERTY_DEVICE_LOCAL_BIT
			MEMORY_PROPERTY_HOST_VISIBLE_BIT
			MEMORY_PROPERTY_HOST_COHERENT_BIT
		usable for:
			IMAGE_TILING_OPTIMAL:
				color images
				FORMAT_D16_UNORM
				FORMAT_D32_SFLOAT
				FORMAT_S8_UINT
				FORMAT_D16_UNORM_S8_UINT
				FORMAT_D32_SFLOAT_S8_UINT
				(non-sparse)
			IMAGE_TILING_LINEAR:
				color images
				(non-sparse)
	memoryTypes[3]:
		heapIndex     = 1
		propertyFlags = 0x000e: count = 3
			MEMORY_PROPERTY_HOST_VISIBLE_BIT
			MEMORY_PROPERTY_HOST_COHERENT_BIT
			MEMORY_PROPERTY_HOST_CACHED_BIT
		usable for:
			IMAGE_TILING_OPTIMAL:
				color images
				FORMAT_D16_UNORM
				FORMAT_D32_SFLOAT
				FORMAT_S8_UINT
				FORMAT_D16_UNORM_S8_UINT
				FORMAT_D32_SFLOAT_S8_UINT
				(non-sparse)
			IMAGE_TILING_LINEAR:
				color images
				(non-sparse)

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

VkPhysicalDevice16BitStorageFeatures:
-------------------------------------
	storageBuffer16BitAccess           = true
	uniformAndStorageBuffer16BitAccess = true
	storagePushConstant16              = true
	storageInputOutput16               = false

VkPhysicalDevice8BitStorageFeatures:
------------------------------------
	storageBuffer8BitAccess           = true
	uniformAndStorageBuffer8BitAccess = true
	storagePushConstant8              = true

VkPhysicalDeviceBufferDeviceAddressFeatures:
--------------------------------------------
	bufferDeviceAddress              = true
	bufferDeviceAddressCaptureReplay = false
	bufferDeviceAddressMultiDevice   = false

VkPhysicalDeviceBufferDeviceAddressFeaturesEXT:
-----------------------------------------------
	bufferDeviceAddress              = true
	bufferDeviceAddressCaptureReplay = false
	bufferDeviceAddressMultiDevice   = false

VkPhysicalDeviceConditionalRenderingFeaturesEXT:
------------------------------------------------
	conditionalRendering          = true
	inheritedConditionalRendering = false

VkPhysicalDeviceCustomBorderColorFeaturesEXT:
---------------------------------------------
	customBorderColors             = true
	customBorderColorWithoutFormat = true

VkPhysicalDeviceDepthClipEnableFeaturesEXT:
-------------------------------------------
	depthClipEnable = true

VkPhysicalDeviceDescriptorIndexingFeatures:
-------------------------------------------
	shaderInputAttachmentArrayDynamicIndexing          = true
	shaderUniformTexelBufferArrayDynamicIndexing       = true
	shaderStorageTexelBufferArrayDynamicIndexing       = true
	shaderUniformBufferArrayNonUniformIndexing         = true
	shaderSampledImageArrayNonUniformIndexing          = true
	shaderStorageBufferArrayNonUniformIndexing         = true
	shaderStorageImageArrayNonUniformIndexing          = true
	shaderInputAttachmentArrayNonUniformIndexing       = true
	shaderUniformTexelBufferArrayNonUniformIndexing    = true
	shaderStorageTexelBufferArrayNonUniformIndexing    = true
	descriptorBindingUniformBufferUpdateAfterBind      = true
	descriptorBindingSampledImageUpdateAfterBind       = true
	descriptorBindingStorageImageUpdateAfterBind       = true
	descriptorBindingStorageBufferUpdateAfterBind      = true
	descriptorBindingUniformTexelBufferUpdateAfterBind = true
	descriptorBindingStorageTexelBufferUpdateAfterBind = true
	descriptorBindingUpdateUnusedWhilePending          = true
	descriptorBindingPartiallyBound                    = true
	descriptorBindingVariableDescriptorCount           = true
	runtimeDescriptorArray                             = true

VkPhysicalDeviceHostQueryResetFeatures:
---------------------------------------
	hostQueryReset = true

VkPhysicalDeviceImagelessFramebufferFeatures:
---------------------------------------------
	imagelessFramebuffer = true

VkPhysicalDeviceInlineUniformBlockFeaturesEXT:
----------------------------------------------
	inlineUniformBlock                                 = true
	descriptorBindingInlineUniformBlockUpdateAfterBind = true

VkPhysicalDeviceLineRasterizationFeaturesEXT:
---------------------------------------------
	rectangularLines         = false
	bresenhamLines           = true
	smoothLines              = false
	stippledRectangularLines = false
	stippledBresenhamLines   = true
	stippledSmoothLines      = false

VkPhysicalDeviceMemoryPriorityFeaturesEXT:
------------------------------------------
	memoryPriority = true

VkPhysicalDeviceMultiviewFeatures:
----------------------------------
	multiview                   = true
	multiviewGeometryShader     = true
	multiviewTessellationShader = true

VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT:
--------------------------------------------------------
	pipelineCreationCacheControl = true

VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR:
--------------------------------------------------------
	pipelineExecutableInfo = true

VkPhysicalDeviceProtectedMemoryFeatures:
----------------------------------------
	protectedMemory = false

VkPhysicalDeviceRobustness2FeaturesEXT:
---------------------------------------
	robustBufferAccess2 = true
	robustImageAccess2  = true
	nullDescriptor      = true

VkPhysicalDeviceSamplerYcbcrConversionFeatures:
-----------------------------------------------
	samplerYcbcrConversion = true

VkPhysicalDeviceScalarBlockLayoutFeatures:
------------------------------------------
	scalarBlockLayout = true

VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures:
----------------------------------------------------
	separateDepthStencilLayouts = true

VkPhysicalDeviceShaderAtomicInt64Features:
------------------------------------------
	shaderBufferInt64Atomics = true
	shaderSharedInt64Atomics = true

VkPhysicalDeviceShaderClockFeaturesKHR:
---------------------------------------
	shaderSubgroupClock = true
	shaderDeviceClock   = false

VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT:
----------------------------------------------------------
	shaderDemoteToHelperInvocation = true

VkPhysicalDeviceShaderDrawParametersFeatures:
---------------------------------------------
	shaderDrawParameters = true

VkPhysicalDeviceShaderFloat16Int8Features:
------------------------------------------
	shaderFloat16 = false
	shaderInt8    = true

VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures:
----------------------------------------------------
	shaderSubgroupExtendedTypes = true

VkPhysicalDeviceSubgroupSizeControlFeaturesEXT:
-----------------------------------------------
	subgroupSizeControl  = true
	computeFullSubgroups = true

VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT:
------------------------------------------------
	texelBufferAlignment = true

VkPhysicalDeviceTimelineSemaphoreFeatures:
------------------------------------------
	timelineSemaphore = true

VkPhysicalDeviceTransformFeedbackFeaturesEXT:
---------------------------------------------
	transformFeedback = true
	geometryStreams   = true

VkPhysicalDeviceUniformBufferStandardLayoutFeatures:
----------------------------------------------------
	uniformBufferStandardLayout = true

VkPhysicalDeviceVariablePointersFeatures:
-----------------------------------------
	variablePointersStorageBuffer = true
	variablePointers              = true

VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT:
--------------------------------------------------
	vertexAttributeInstanceRateDivisor     = true
	vertexAttributeInstanceRateZeroDivisor = true

VkPhysicalDeviceVulkan11Features:
---------------------------------
	storageBuffer16BitAccess           = true
	uniformAndStorageBuffer16BitAccess = true
	storagePushConstant16              = true
	storageInputOutput16               = false
	multiview                          = true
	multiviewGeometryShader            = true
	multiviewTessellationShader        = true
	variablePointersStorageBuffer      = true
	variablePointers                   = true
	protectedMemory                    = false
	samplerYcbcrConversion             = true
	shaderDrawParameters               = true

VkPhysicalDeviceVulkan12Features:
---------------------------------
	samplerMirrorClampToEdge                           = true
	drawIndirectCount                                  = true
	storageBuffer8BitAccess                            = true
	uniformAndStorageBuffer8BitAccess                  = true
	storagePushConstant8                               = true
	shaderBufferInt64Atomics                           = true
	shaderSharedInt64Atomics                           = true
	shaderFloat16                                      = false
	shaderInt8                                         = true
	descriptorIndexing                                 = true
	shaderInputAttachmentArrayDynamicIndexing          = true
	shaderUniformTexelBufferArrayDynamicIndexing       = true
	shaderStorageTexelBufferArrayDynamicIndexing       = true
	shaderUniformBufferArrayNonUniformIndexing         = true
	shaderSampledImageArrayNonUniformIndexing          = true
	shaderStorageBufferArrayNonUniformIndexing         = true
	shaderStorageImageArrayNonUniformIndexing          = true
	shaderInputAttachmentArrayNonUniformIndexing       = true
	shaderUniformTexelBufferArrayNonUniformIndexing    = true
	shaderStorageTexelBufferArrayNonUniformIndexing    = true
	descriptorBindingUniformBufferUpdateAfterBind      = true
	descriptorBindingSampledImageUpdateAfterBind       = true
	descriptorBindingStorageImageUpdateAfterBind       = true
	descriptorBindingStorageBufferUpdateAfterBind      = true
	descriptorBindingUniformTexelBufferUpdateAfterBind = true
	descriptorBindingStorageTexelBufferUpdateAfterBind = true
	descriptorBindingUpdateUnusedWhilePending          = true
	descriptorBindingPartiallyBound                    = true
	descriptorBindingVariableDescriptorCount           = true
	runtimeDescriptorArray                             = true
	samplerFilterMinmax                                = true
	scalarBlockLayout                                  = true
	imagelessFramebuffer                               = true
	uniformBufferStandardLayout                        = true
	shaderSubgroupExtendedTypes                        = true
	separateDepthStencilLayouts                        = true
	hostQueryReset                                     = true
	timelineSemaphore                                  = true
	bufferDeviceAddress                                = true
	bufferDeviceAddressCaptureReplay                   = false
	bufferDeviceAddressMultiDevice                     = false
	vulkanMemoryModel                                  = true
	vulkanMemoryModelDeviceScope                       = true
	vulkanMemoryModelAvailabilityVisibilityChains      = false
	shaderOutputViewportIndex                          = true
	shaderOutputLayer                                  = true
	subgroupBroadcastDynamicId                         = true

VkPhysicalDeviceVulkanMemoryModelFeatures:
------------------------------------------
	vulkanMemoryModel                             = true
	vulkanMemoryModelDeviceScope                  = true
	vulkanMemoryModelAvailabilityVisibilityChains = false

VkPhysicalDeviceYcbcrImageArraysFeaturesEXT:
--------------------------------------------
	ycbcrImageArrays = true


GPU1:
VkPhysicalDeviceProperties:
---------------------------
	apiVersion     = 4194306 (1.0.2)
	driverVersion  = 1 (0x0001)
	vendorID       = 0x10005
	deviceID       = 0x0000
	deviceType     = PHYSICAL_DEVICE_TYPE_CPU
	deviceName     = llvmpipe (LLVM 11.0.0, 128 bits)

VkPhysicalDeviceLimits:
-----------------------
	maxImageDimension1D                             = 16384
	maxImageDimension2D                             = 16384
	maxImageDimension3D                             = 4096
	maxImageDimensionCube                           = 32768
	maxImageArrayLayers                             = 2048
	maxTexelBufferElements                          = 134217728
	maxUniformBufferRange                           = 65536
	maxStorageBufferRange                           = 134217728
	maxPushConstantsSize                            = 128
	maxMemoryAllocationCount                        = 4096
	maxSamplerAllocationCount                       = 32768
	bufferImageGranularity                          = 0x00000040
	sparseAddressSpaceSize                          = 0x00000000
	maxBoundDescriptorSets                          = 8
	maxPerStageDescriptorSamplers                   = 32
	maxPerStageDescriptorUniformBuffers             = 16
	maxPerStageDescriptorStorageBuffers             = 16
	maxPerStageDescriptorSampledImages              = 128
	maxPerStageDescriptorStorageImages              = 128
	maxPerStageDescriptorInputAttachments           = 8
	maxPerStageResources                            = 128
	maxDescriptorSetSamplers                        = 32768
	maxDescriptorSetUniformBuffers                  = 256
	maxDescriptorSetUniformBuffersDynamic           = 256
	maxDescriptorSetStorageBuffers                  = 256
	maxDescriptorSetStorageBuffersDynamic           = 256
	maxDescriptorSetSampledImages                   = 256
	maxDescriptorSetStorageImages                   = 256
	maxDescriptorSetInputAttachments                = 256
	maxVertexInputAttributes                        = 32
	maxVertexInputBindings                          = 32
	maxVertexInputAttributeOffset                   = 2047
	maxVertexInputBindingStride                     = 2048
	maxVertexOutputComponents                       = 128
	maxTessellationGenerationLevel                  = 64
	maxTessellationPatchSize                        = 32
	maxTessellationControlPerVertexInputComponents  = 128
	maxTessellationControlPerVertexOutputComponents = 128
	maxTessellationControlPerPatchOutputComponents  = 128
	maxTessellationControlTotalOutputComponents     = 4096
	maxTessellationEvaluationInputComponents        = 128
	maxTessellationEvaluationOutputComponents       = 128
	maxGeometryShaderInvocations                    = 32
	maxGeometryInputComponents                      = 64
	maxGeometryOutputComponents                     = 128
	maxGeometryOutputVertices                       = 1024
	maxGeometryTotalOutputComponents                = 1024
	maxFragmentInputComponents                      = 128
	maxFragmentOutputAttachments                    = 8
	maxFragmentDualSrcAttachments                   = 2
	maxFragmentCombinedOutputResources              = 8
	maxComputeSharedMemorySize                      = 32768
	maxComputeWorkGroupCount: count = 3
		65535
		65535
		65535
	maxComputeWorkGroupInvocations                  = 1024
	maxComputeWorkGroupSize: count = 3
		1024
		1024
		1024
	subPixelPrecisionBits                           = 8
	subTexelPrecisionBits                           = 8
	mipmapPrecisionBits                             = 8
	maxDrawIndexedIndexValue                        = 4294967295
	maxDrawIndirectCount                            = 4294967295
	maxSamplerLodBias                               = 16
	maxSamplerAnisotropy                            = 16
	maxViewports                                    = 16
	maxViewportDimensions: count = 2
		16384
		16384
	viewportBoundsRange: count = 2
		-32768
		32768
	viewportSubPixelBits                            = 0
	minMemoryMapAlignment                           = 4096
	minTexelBufferOffsetAlignment                   = 0x00000010
	minUniformBufferOffsetAlignment                 = 0x00000010
	minStorageBufferOffsetAlignment                 = 0x00000010
	minTexelOffset                                  = -32
	maxTexelOffset                                  = 31
	minTexelGatherOffset                            = -32
	maxTexelGatherOffset                            = 31
	minInterpolationOffset                          = -2
	maxInterpolationOffset                          = 2
	subPixelInterpolationOffsetBits                 = 8
	maxFramebufferWidth                             = 16384
	maxFramebufferHeight                            = 16384
	maxFramebufferLayers                            = 2048
	framebufferColorSampleCounts: count = 2
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_4_BIT
	framebufferDepthSampleCounts: count = 2
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_4_BIT
	framebufferStencilSampleCounts: count = 2
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_4_BIT
	framebufferNoAttachmentsSampleCounts: count = 2
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_4_BIT
	maxColorAttachments                             = 8
	sampledImageColorSampleCounts: count = 2
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_4_BIT
	sampledImageIntegerSampleCounts: count = 2
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_4_BIT
	sampledImageDepthSampleCounts: count = 2
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_4_BIT
	sampledImageStencilSampleCounts: count = 2
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_4_BIT
	storageImageSampleCounts: count = 2
		SAMPLE_COUNT_1_BIT
		SAMPLE_COUNT_4_BIT
	maxSampleMaskWords                              = 1
	timestampComputeAndGraphics                     = true
	timestampPeriod                                 = 1
	maxClipDistances                                = 8
	maxCullDistances                                = 8
	maxCombinedClipAndCullDistances                 = 8
	discreteQueuePriorities                         = 2
	pointSizeRange: count = 2
		0
		255
	lineWidthRange: count = 2
		1
		1
	pointSizeGranularity                            = 0.125
	lineWidthGranularity                            = 0
	strictLines                                     = false
	standardSampleLocations                         = true
	optimalBufferCopyOffsetAlignment                = 0x00000080
	optimalBufferCopyRowPitchAlignment              = 0x00000080
	nonCoherentAtomSize                             = 0x00000040

VkPhysicalDeviceSparseProperties:
---------------------------------
	residencyStandard2DBlockShape            = false
	residencyStandard2DMultisampleBlockShape = false
	residencyStandard3DBlockShape            = false
	residencyAlignedMipSize                  = false
	residencyNonResidentStrict               = false

VkPhysicalDeviceDriverPropertiesKHR:
------------------------------------
	driverID           = DRIVER_ID_MESA_LLVMPIPE
	driverName         = llvmpipe
	driverInfo         = Mesa 21.0.0 (LLVM 11.0.0)
	conformanceVersion = 1.0.0.0

VkPhysicalDeviceIDPropertiesKHR:
--------------------------------
	deviceUUID      = 00000000-0000-0000-0000-000000000000
	driverUUID      = 00000000-0000-0000-0000-000000000000
	deviceNodeMask  = 0
	deviceLUIDValid = false

VkPhysicalDevicePushDescriptorPropertiesKHR:
--------------------------------------------
	maxPushDescriptors = 32

VkPhysicalDeviceTransformFeedbackPropertiesEXT:
-----------------------------------------------
	maxTransformFeedbackStreams                = 4
	maxTransformFeedbackBuffers                = 4
	maxTransformFeedbackBufferSize             = 0xffffffff
	maxTransformFeedbackStreamDataSize         = 512
	maxTransformFeedbackBufferDataSize         = 512
	maxTransformFeedbackBufferDataStride       = 512
	transformFeedbackQueries                   = true
	transformFeedbackStreamsLinesTriangles     = false
	transformFeedbackRasterizationStreamSelect = false
	transformFeedbackDraw                      = true

VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT:
----------------------------------------------------
	maxVertexAttribDivisor = 4294967295


Device Extensions: count = 23
-----------------------------
	VK_EXT_external_memory_dma_buf      : extension revision 1
	VK_EXT_index_type_uint8             : extension revision 1
	VK_EXT_post_depth_coverage          : extension revision 1
	VK_EXT_private_data                 : extension revision 1
	VK_EXT_shader_stencil_export        : extension revision 1
	VK_EXT_transform_feedback           : extension revision 1
	VK_EXT_vertex_attribute_divisor     : extension revision 3
	VK_GOOGLE_decorate_string           : extension revision 1
	VK_GOOGLE_hlsl_functionality1       : 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_device_group                 : extension revision 1
	VK_KHR_draw_indirect_count          : extension revision 1
	VK_KHR_driver_properties            : extension revision 1
	VK_KHR_get_memory_requirements2     : extension revision 1
	VK_KHR_incremental_present          : extension revision 1
	VK_KHR_maintenance1                 : 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_storage_buffer_storage_class : extension revision 1
	VK_KHR_swapchain                    : extension revision 68

VkQueueFamilyProperties:
========================
	queueProperties[0]:
	-------------------
		minImageTransferGranularity = (1,1,1)
		queueCount                  = 1
		queueFlags                  = QUEUE_GRAPHICS | QUEUE_COMPUTE | QUEUE_TRANSFER
		timestampValidBits          = 64
		present support             = true

VkPhysicalDeviceMemoryProperties:
=================================
memoryHeaps: count = 1
	memoryHeaps[0]:
		size   = 2147483648 (0x80000000) (2.00 GiB)
		budget = 0 (0x00000000) (0.00 B)
		usage  = 0 (0x00000000) (0.00 B)
		flags: count = 1
			MEMORY_HEAP_DEVICE_LOCAL_BIT
memoryTypes: count = 1
	memoryTypes[0]:
		heapIndex     = 0
		propertyFlags = 0x000f: count = 4
			MEMORY_PROPERTY_DEVICE_LOCAL_BIT
			MEMORY_PROPERTY_HOST_VISIBLE_BIT
			MEMORY_PROPERTY_HOST_COHERENT_BIT
			MEMORY_PROPERTY_HOST_CACHED_BIT
		usable for:
			IMAGE_TILING_OPTIMAL:
				color images
				FORMAT_D16_UNORM
				FORMAT_X8_D24_UNORM_PACK32
				FORMAT_D32_SFLOAT
				FORMAT_S8_UINT
				FORMAT_D24_UNORM_S8_UINT
				FORMAT_D32_SFLOAT_S8_UINT
				(non-sparse)
			IMAGE_TILING_LINEAR:
				color images
				(non-sparse)

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

VkPhysicalDeviceIndexTypeUint8FeaturesEXT:
------------------------------------------
	indexTypeUint8 = true

VkPhysicalDeviceTransformFeedbackFeaturesEXT:
---------------------------------------------
	transformFeedback = true
	geometryStreams   = true

VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT:
--------------------------------------------------
	vertexAttributeInstanceRateDivisor     = true
	vertexAttributeInstanceRateZeroDivisor = false

 

Lastly... Since GW2 doesn't apparently like repeat key press, can i disable it with a script (maybe edit play.sh) to disable it when running and re-enable it when exiting? That would be a huge help! It kinda sucks having it off, but also constantly disabling/enabling.

 

And yes, after what i've been through, i'm paranoid. 😛

I just wanna make sure the game is using everything it can.

 

EDIT: vkcube runs and spins but slowly? Last time i tried in Ubuntu it spinned really fast. What's the deal with that?

 

EDIT2: Actually, i need to test if DXVK is working, not only vulkan...

Edited by Veprovina.4876
Link to comment
Share on other sites

i took a look at the github for the package you are using (AV's/liberodark).

 

in your GW2 folder where the play.sh is, go to the bin folder and open the file called user_run (yes it has no extension) with your text editor.

 

inside that file is the actual script the author uses to launch gw2 with their custom wine build.

add the following lines after the mesa stuff and before the "# Launch Command" (in-between basically)

 

export DXVK_FILTER_DEVICE_NAME=BONAIRE
export DXVK_LOG_LEVEL=info
export DXVK_STATE_CACHE=1
export DXVK_STATE_CACHE_PATH="$PWD/shader_cache"

 

the dxvk state cache path isnt really needed but it can be convenient to have all your cache files in one place so you can just purge anytime you wish. at this point you can also add DXVK_HUD there and set it up how you wish.

 

adding these lines will allow you to enable DXVK's information log and show you what version DXVK is running at and what GPU it will use on the terminal. we also added a filter env var for dxvk for force it to specifically select your R7 GPU -- this info is based on the vulkan output you provided:

 

Device Groups:
==============
Group 0:
	Properties:
		physicalDevices: count = 1
			AMD RADV BONAIRE (ACO) (ID: 0)
		subsetAllocation = 0

	Present Capabilities:
		AMD RADV BONAIRE (ACO) (ID: 0):
			Can present images from the following devices: count = 1
				AMD RADV BONAIRE (ACO) (ID: 0)
		Present modes: count = 1
			DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR

Group 1:
	Properties:
		physicalDevices: count = 1
			llvmpipe (LLVM 11.0.0, 128 bits) (ID: 0)
		subsetAllocation = 0

WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
	Present Capabilities:
		llvmpipe (LLVM 11.0.0, 128 bits) (ID: 0):
			Can present images from the following devices: count = 1
				llvmpipe (LLVM 11.0.0, 128 bits) (ID: 0)
		Present modes: count = 1
			DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR

 

anyway try the above and see if you still get 5fps (after we force dxvk to look-for/use your GPU)

 

BTW: looking at the script itself im not sure if "LD_LIBRARY_PATH" is even needed because the file it points to, libpng16.so.16 should already be included in your distro (and up to date as well) and since you're not running MESA drivers im not really sure if the mesa env vars in the script are required as well -- but well, just leave them there i guess :)

  • Thanks 1
Link to comment
Share on other sites

Thank you @Astyrah.4015 and @VAHNeunzehnsechundsiebzig. for the help but i'm downloading Windows again...

 

I finally made it work kinda with Lutris again, used DXVK 1.7.2 instead of the newest one because the newest one didn't work.

And it worked fine for exactly 1 session. After that, all audio became distorted only in GW2, i could play GW2 and run youtube - GW2 was distorted, youtube wasn't. I tried restarting puleaudio, it wasn't helping.

 

Not to mention there was still slight input lag.

 

I also tried running it with Proton from Steam, i found a way how to do that with Lutris, but that also didn't work. I did set up everything correctly, but esync wasn't working then and eh... Even if it did work, i mean, it would still use wine and DXVK to run, and i don't think my hardware is up to the task to be honest. After a week of trying to make this game work on Linux, i'm giving up, i don't want to try anymore, i'm done. I think i gave it a fair shot far beyond what any sane person would do, it just doesn't work.

 

Maybe one day when i get a $5.000 computer i can try again cause apparently my configuration isn't all that supported by Linux, and isn't really capable of running all the translation layers necessary to run the game. It's a shame, but i kinda expected it to be honest. I mean, not only is the system running the game, it's also running all the emulation at the same time so, the audio thing was probably just my CPU throttling.

 

Oh well. When i inevitably upgrade my PC, i'll try again. Til then, Windows will have to do and i'll have to give Microsoft all my data. 📂

Link to comment
Share on other sites

1 hour ago, Veprovina.4876 said:

Thank you @Astyrah.4015 and @VAHNeunzehnsechundsiebzig. for the help but i'm downloading Windows again...

 

I finally made it work kinda with Lutris again, used DXVK 1.7.2 instead of the newest one because the newest one didn't work.

And it worked fine for exactly 1 session. After that, all audio became distorted only in GW2, i could play GW2 and run youtube - GW2 was distorted, youtube wasn't. I tried restarting puleaudio, it wasn't helping.

 

Not to mention there was still slight input lag.

 

I also tried running it with Proton from Steam, i found a way how to do that with Lutris, but that also didn't work. I did set up everything correctly, but esync wasn't working then and eh... Even if it did work, i mean, it would still use wine and DXVK to run, and i don't think my hardware is up to the task to be honest. After a week of trying to make this game work on Linux, i'm giving up, i don't want to try anymore, i'm done. I think i gave it a fair shot far beyond what any sane person would do, it just doesn't work.

 

Maybe one day when i get a $5.000 computer i can try again cause apparently my configuration isn't all that supported by Linux, and isn't really capable of running all the translation layers necessary to run the game. It's a shame, but i kinda expected it to be honest. I mean, not only is the system running the game, it's also running all the emulation at the same time so, the audio thing was probably just my CPU throttling.

 

Oh well. When i inevitably upgrade my PC, i'll try again. Til then, Windows will have to do and i'll have to give Microsoft all my data. 📂

 

honestly, that's fine. like i said a few posts back, it's one of the options you can consider -- that while linux is great, it's not perfect just like windows and macos.

 

i do hope your journey in linux though short and with frustrations, was at least worth it and that there was some (or a lot) of learning that was had on your end. maybe you can try again when you have better hardware 🙂

  • Thanks 1
Link to comment
Share on other sites

3 minutes ago, Astyrah.4015 said:

 

honestly, that's fine. like i said a few posts back, it's one of the options you can consider -- that while linux is great, it's not perfect just like windows and macos.

 

i do hope your journey in linux though short and with frustrations, was at least worth it and that there was some (or a lot) of learning that was had on your end. maybe you can try again when you have better hardware 🙂

Yeah, it was definitely a learning experience!

This is not my first foray into linux, i was trying it way back to when openSUSE was in its infancy lol.

So i do know the basics, but a lot has also changed in the meantime. So i did learn a lot of new things while googling for problems haha! So it wasn't a complete waste of time, i'm more familiar with it all and i found a really cool new distro, the Pop OS that i think i'll use next time from the get go! I really like it!

 

I went on and off trying different distros mainly settling on Ubuntu most of the time, but never until recently have i felt like i could fully switch to linux for all my needs. Gaming isn't all i do on a computer and linux has gotten so good at emulating windows stuff, and there's so much new helper programs that it's really easy to make things work. That's why it's so disappointing. Cause i thought i'd really be able to do it this time.

 

But i'm not giving up on linux, it's just, for the time being, Windows is the better option because of my hardware. And it's not like Windows sucks or anything, i don't hate it i just have a few problems with it that i think Linux does way better overall... But indeed, Linux is not perfect either, and that's ok. There's something for everyone! :classic_smile:

 

So, with a tail between my legs, i go back defeated to Windows.

The battle is lost, but not the war! 😅

I'll be back! 🦾

  • Like 1
Link to comment
Share on other sites

9 minutes ago, Veprovina.4876 said:

Yeah, it was definitely a learning experience!

This is not my first foray into linux, i was trying it way back to when openSUSE was in its infancy lol.

So i do know the basics, but a lot has also changed in the meantime. So i did learn a lot of new things while googling for problems haha! So it wasn't a complete waste of time, i'm more familiar with it all and i found a really cool new distro, the Pop OS that i think i'll use next time from the get go! I really like it!

 

I went on and off trying different distros mainly settling on Ubuntu most of the time, but never until recently have i felt like i could fully switch to linux for all my needs. Gaming isn't all i do on a computer and linux has gotten so good at emulating windows stuff, and there's so much new helper programs that it's really easy to make things work. That's why it's so disappointing. Cause i thought i'd really be able to do it this time.

 

But i'm not giving up on linux, it's just, for the time being, Windows is the better option because of my hardware. And it's not like Windows sucks or anything, i don't hate it i just have a few problems with it that i think Linux does way better overall... But indeed, Linux is not perfect either, and that's ok. There's something for everyone! :classic_smile:

 

So, with a tail between my legs, i go back defeated to Windows.

The battle is lost, but not the war! 😅

I'll be back! 🦾

Unfortunately, that's the bad part on Linux. You can feel proud about all the things you could do.

 

I'm glad you loved Pop OS. Don't feel sad because sometimes you have to retreat in order to fight back, we will support you while you're recovering.

 

The really good and huge thing, Linux used to be really abandoned in terms of gaming long time ago. Right now, the improvements are getting bigger and better.

 

I think it won't be a long time till you can come back. The Linux gaming community is stronger than ever, soon or later we will have if not full, some freedom to play. Valve is becoming one of the huge efforts machine.

 

Here you have some numbers in case you're interested:

 

https://store.steampowered.com/hwsurvey?platform=combined

 

We're still not the Windows percentage, but it's getting better every day (there was I time I thought that would be impossible because everything looked much easier on Windows).

 

The other issue right now is the lack of support on Linux for EAC (a.k.a Easy Anti Cheat). There are some rumours right now but nothing confirmed.

 

I wish you luck on your next try and may the Tux be with you 😛

 

 

 

 

  • Thanks 1
Link to comment
Share on other sites

5 minutes ago, Minux.2416 said:

Unfortunately, that's the bad part on Linux. You can feel proud about all the things you could do.

 

I'm glad you loved Pop OS. Don't feel sad because sometimes you have to retreat in order to fight back, we will support you while you're recovering.

Thank you! 😃 Hopefully, the next time i attempt to switch, things will "just work" and i won't have so much problems. And i really did all i could this time, it's just one thing fixed, the other breaks. And i'm not blaming Linux here at all, it's a great system, it's just that my hardware really needs an upgrade and i have to do that before attempting anything further. Due to the nature of things in Linux, and what it can all do now, it requires a bit of a beefier system than a Windows one for the same applications so here's to me upgrading one day lol.

 

5 minutes ago, Minux.2416 said:

The really good and huge thing, Linux used to be really abandoned in terms of gaming long time ago. Right now, the improvements are getting bigger and better.

I actually remember those days lol. Even the now most popular distros were so rudimentary at one point that i struggled to even get them to run, let alone use them for something useful. They used to have way too much problems, and most of them weren't even their fault it's just that no one was taking Linux seriously and there were no drivers, and way less public opensource support than it is now. I'm glad it bounced back though, Linux has so much potential, and we're seeing that more and more every day!

 

5 minutes ago, Minux.2416 said:

I think it won't be a long time till you can come back. The Linux gaming community is stronger than ever, soon or later we will have if not full, some freedom to play. Valve is becoming one of the huge efforts machine.

 

Here you have some numbers in case you're interested:

 

https://store.steampowered.com/hwsurvey?platform=combined

 

We're still not the Windows percentage, but it's getting better every day (there was I time I thought that would be impossible because everything looked much easier on Windows).

 

The other issue right now is the lack of support on Linux for EAC (a.k.a Easy Anti Cheat). There are some rumours right now but nothing confirmed.

Yes, it's impressive how far Linux has come, not only in gaming but also actually some native support from certain software developers! Especially the drivers! I remember, even more or less "recently", getting a driver to "kinda work" was a huge undertaking, and not long before that, there were not even native proprietary drivers for a lot of the GPUs.

 

AMD and Steam are the real MVPs here with all their support, and i'm glad i get to see Linux grow!

 

5 minutes ago, Minux.2416 said:

I wish you luck on your next try and may the Tux be with you 😛

🦾

 

  • Like 1
Link to comment
Share on other sites

10 minutes ago, VAHNeunzehnsechundsiebzig. said:

maybe try opensuse next time. Ubuntu is always doing strange things and not all distros pulling from it clean up the mess. 

 

Or if you are REALLY feel like deep diving there is always slackware. But if you use that the willingness to learn and get dirty is mandatory.

I'll try it, but next time. If i insall openSUSE now i think the result will be more or less the same, my hardware is just not good enough to run through the emulation.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...