libretro / beetle-psx-libretro

Standalone port/fork of Mednafen PSX to the Libretro API.
GNU General Public License v2.0
308 stars 131 forks source link

Runahead breaks hardware cores on Beetle PSX [SOLVED] #443

Closed treymerkley closed 5 years ago

treymerkley commented 5 years ago

Description

I've been unable to run any games under Beetle PSX HW 0.9.44.1. Both Vulkan and GL produce breaking errors, although I can't tell if they're related. When run under GL, I get

[libretro INFO] Target framebuffer size: 1024x960
[INFO] Environ SET_GEOMETRY.
[libretro WARN] warning, save state size has changed
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[INFO] [Discord] updating (2)
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.

Continuing indefinitely. When run under Vulkan:

[INFO] [slang]:
[INFO] [slang]:   Parameters:
[INFO] [Vulkan filter chain]: Not using frame history.
[INFO] [Vulkan filter chain]: Not using framebuffer feedback.
[INFO] [udev]: Plugged pad: Sony PLAYSTATION(R)3 Controller (1356:616) on port #0.
[INFO] [udev]: Pad #0 (/dev/input/event14) supports force feedback.
[INFO] [udev]: Pad #0 (/dev/input/event14) supports 16 force feedback effects.
[INFO] [autoconf]: No profiles found.
[INFO] [Autoconf]: no profiles found for Sony PLAYSTATION(R)3 Controller (1356/616).
[INFO] [Joypad]: Found joypad driver: "udev".
[INFO] [Font]: Using font rendering backend: freetype.
[INFO] [X11]: Suspending screensaver (X11, xdg-screensaver).
[INFO] [Video]: Found display server: x11
Can't locate Net/DBus.pm in @INC (you may need to install the Net::DBus module) (@INC contains: /usr/lib/perl5/5.28/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/5.28/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/5.28/core_perl /usr/share/perl5/core_perl) at -e line 5.
BEGIN failed--compilation aborted at -e line 5.
[INFO] [OpenAL]: Using 11 buffers of 1024 bytes.
[INFO] [Font]: Using font rendering backend: freetype.
Segmentation fault (core dumped)

EDIT: After going through and trying with a fresh ~/.config/retroarch file, I found the actual offending message. I didn't realize that this was the problem because it occurs so far above everything else.

Protocol error: bad 3 (Window); Sequence Number 11
 Opcode (20, 0) = GetProperty
 Bad resource 0 (0x0)
 at -e line 15.

This occurs in both OGL and Vulkan. There's some precedence to this in the main RetroArch branch, but none newer than 2016, and most of them with either AMD cards or bad BIOS files, neither of which are a problem for me: My card is an Nvidia and the BIOS files work with Mednafen upstream.

Expected behavior

Both GL and Vulkan to progress to playable state.

Actual behavior

Crash of some kind (given above)

Steps to reproduce the bug

  1. Set video driver to either GL or Vulkan
  2. Start a given game

Bisect Results

I actually don't know what this is, would somebody explain it to me?

Version/Commit

Retroarch 1.7.5

Core options

beetle_psx_hw_adaptive_smoothing = "enabled"
beetle_psx_hw_analog_calibration = "disabled"
beetle_psx_hw_analog_toggle = "disabled"
beetle_psx_hw_cd_access_method = "sync"
beetle_psx_hw_cd_fastload = "2x (native)"
beetle_psx_hw_cpu_freq_scale = "100% (native)"
beetle_psx_hw_cpu_overclock = "enabled"
beetle_psx_hw_crop_overscan = "enabled"
beetle_psx_hw_depth = "dithered 16bpp (native)"
beetle_psx_hw_display_internal_fps = "disabled"
beetle_psx_hw_display_internal_framerate = "disabled"
beetle_psx_hw_display_vram = "disabled"
beetle_psx_hw_dither_mode = "internal resolution"
beetle_psx_hw_enable_memcard1 = "enabled"
beetle_psx_hw_enable_multitap_port1 = "disabled"
beetle_psx_hw_enable_multitap_port2 = "disabled"
beetle_psx_hw_filter = "nearest"
beetle_psx_hw_frame_duping = "disabled"
beetle_psx_hw_frame_duping_enable = "enabled"
beetle_psx_hw_gpu_overclock = "1x(native)"
beetle_psx_hw_gte_overclock = "enabled"
beetle_psx_hw_gun_cursor = "Cross"
beetle_psx_hw_image_crop = "disabled"
beetle_psx_hw_image_offset = "disabled"
beetle_psx_hw_initial_scanline = "0"
beetle_psx_hw_initial_scanline_pal = "0"
beetle_psx_hw_internal_color_depth = "32bpp"
beetle_psx_hw_internal_resolution = "4x"
beetle_psx_hw_last_scanline = "239"
beetle_psx_hw_last_scanline_pal = "287"
beetle_psx_hw_lineRender = "default"
beetle_psx_hw_mouse_sensitivity = "100%"
beetle_psx_hw_negcon_deadzone = "0"
beetle_psx_hw_negcon_response = "linear"
beetle_psx_hw_pgxp_caching = "enabled"
beetle_psx_hw_pgxp_mode = "memory + CPU"
beetle_psx_hw_pgxp_texture = "enabled"
beetle_psx_hw_pgxp_vertex = "disabled"
beetle_psx_hw_renderer = "vulkan"
beetle_psx_hw_renderer_software_fb = "enabled"
beetle_psx_hw_shared_memory_cards = "disabled"
beetle_psx_hw_skip_bios = "disabled"
beetle_psx_hw_skipbios = "enabled"
beetle_psx_hw_use_mednafen_memcard0_method = "libretro"
beetle_psx_hw_widescreen_hack = "enabled"
beetle_psx_hw_wireframe = "disabled"

EDIT 12/07/2018

Here's a (mostly) full log of running the GL variant. The only parts that have been omitted are long repetitions of render errors, replaced by ...

[INFO] [recording] twitch streaming key empty[INFO] RetroArch 1.7.5 (Git 65d205f431)
[INFO] === Build =======================================
Capabilities: MMX MMXEXT SSE1 SSE2 SSE3 SSSE3 SSE4 SSE4.2 AVX AES 
Built: Nov  7 2018
[INFO] Version: 1.7.5
[INFO] Git: 65d205f431
[INFO] =================================================
[INFO] Environ SET_PIXEL_FORMAT: RGB565.
[INFO] Version of libretro API: 1
[INFO] Compiled against API: 1
[INFO] [Audio]: Set audio input rate to: 30000.00 Hz.
[INFO] [Video]: Timings deviate too much. Will not adjust. (Display = 29.49 Hz, Game = 60.00 Hz)
[INFO] [Video]: Game FPS > Monitor FPS. Cannot rely on VSync.
[INFO] [Video]: Video @ fullscreen
[ERROR] [Wayland]: Failed to connect to Wayland server.
[INFO] [GLX]: GLX_EXT_swap_control_tear supported.
[INFO] [GL]: Found GL context: x
[INFO] [GL]: Detecting screen resolution 1360x768.
[INFO] [GLX]: Window manager is GNOME Shell.
[INFO] [XINERAMA]: Xinerama version: 1.1.
[INFO] [XINERAMA]: Xinerama screens: 1.
[INFO] [GLX]: Using Xinerama on screen #0.
[INFO] [GLX]: X = 0, Y = 0, W = 1360, H = 768.
[INFO] [GLX]: Using windowed fullscreen.
[INFO] [GLX]: Found swap function: glXSwapIntervalEXT.
[INFO] [GLX]: glXSwapIntervalEXT(0)
[INFO] [GL]: Vendor: NVIDIA Corporation, Renderer: GeForce GT 740/PCIe/SSE2.
[INFO] [GL]: Version: 4.6.0 NVIDIA 415.18.
[INFO] [GL]: Using resolution 1360x768
[INFO] [GL]: Default shader backend found: glsl.
[INFO] [Shader driver]: Using GLSL shader backend.
[INFO] [GLSL]: Checking GLSL shader support ...
[WARN] [GL]: Stock GLSL shaders will be used.
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Linking GLSL program.
[INFO] Setting up menu pipeline shaders for XMB ... 
[INFO] [GLSL]: Compiling ribbon shader..
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Compiling simple ribbon shader..
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Compiling snow shader..
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Compiling modern snow shader..
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Compiling bokeh shader..
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Compiling snowflake shader..
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Linking GLSL program.
[INFO] Resetting shader to defaults ... 
[INFO] [GL]: Using 4 textures.
[INFO] [GL]: Loaded 1 program(s).
[INFO] [GL]: Using GL_RGB565 for texture uploads.
[INFO] [Joypad]: Found joypad driver: "udev".
[INFO] [Font]: Using font rendering backend: freetype.
[INFO] [X11]: Suspending screensaver (X11, xdg-screensaver).
[INFO] [Video]: Found display server: x11
[INFO] [OpenAL]: Using 11 buffers of 1024 bytes.
[INFO] [Menu]: Found menu display driver: "gl".
Protocol error: bad 3 (Window); Sequence Number 11
 Opcode (20, 0) = GetProperty
 Bad resource 0 (0x0)
 at -e line 15.
[INFO] [Font]: Using font rendering backend: freetype.
[INFO] [Font]: Using font rendering backend: freetype.
[INFO] [LED]: LED driver = 'null' 0x55d7339ef380
[INFO] [MIDI]: Initializing ...
[INFO] [MIDI]: Input disabled.
[INFO] [MIDI]: Output disabled.
[INFO] [MIDI]: Initialized "null" driver.
[INFO] SRAM will not be saved.
[INFO] [Discord] initializing ..
[INFO] [Discord] updating (1)
[INFO] Loading history file: [/home/user/.config/retroarch/content_history.lpl].
[INFO] Loading history file: [/home/user/.config/retroarch/content_favorites.lpl].
[INFO] Loading history file: [/home/user/.config/retroarch/content_music_history.lpl].
[INFO] Loading history file: [/home/user/.config/retroarch/content_video_history.lpl].
[INFO] Loading history file: [/home/user/.config/retroarch/content_image_history.lpl].
[INFO] [GL]: VSync => off
[INFO] [GLX]: glXSwapIntervalEXT(0)
[INFO] [GL]: VSync => on
[INFO] [GLX]: glXSwapIntervalEXT(1)
[INFO] [Discord] connected to user: billy.wade#7203 - avatar id: 406229664000901130
[INFO] Using content: /run/user/1000/gvfs/smb-share:server=192.168.2.5,share=clementine/Games/Sony/PSX/crashbandicoot.cue.
[INFO] arg #0: retroarch
[INFO] arg #1: /run/user/1000/gvfs/smb-share:server=192.168.2.5,share=clementine/Games/Sony/PSX/crashbandicoot.cue
[INFO] arg #2: -c
[INFO] arg #3: /home/user/.config/retroarch/retroarch.cfg
[INFO] arg #4: -L
[INFO] arg #5: /home/user/.config/retroarch/cores/mednafen_psx_hw_libretro.so
[INFO] arg #6: -v
[INFO] Unloading game..
[INFO] Unloading core..
[INFO] Unloading core symbols..
[INFO] [XINERAMA]: Xinerama version: 1.1.
[INFO] [XINERAMA]: Xinerama screens: 1.
[INFO] [XINERAMA]: Saved monitor #0.
[INFO] [Video]: Does not have enough samples for monitor refresh rate estimation. Requires to run for at least 4096 frames.
[INFO] Set config file to : /home/user/.config/retroarch/retroarch.cfg
[INFO] RetroArch 1.7.5 (Git 65d205f431)
[INFO] Redirecting save file to "/run/user/1000/gvfs/smb-share:server=192.168.2.5,share=clementine/Games/Sony/PSX/crashbandicoot.srm".
[INFO] Redirecting savestate to "/run/user/1000/gvfs/smb-share:server=192.168.2.5,share=clementine/Games/Sony/PSX/crashbandicoot.state".
[INFO] === Build =======================================
Capabilities: MMX MMXEXT SSE1 SSE2 SSE3 SSSE3 SSE4 SSE4.2 AVX AES 
Built: Nov  7 2018
[INFO] Version: 1.7.5
[INFO] Git: 65d205f431
[INFO] =================================================
[INFO] Loading dynamic libretro core from: "/home/user/.config/retroarch/cores/mednafen_psx_hw_libretro.so"
[INFO] [overrides] no core-specific overrides found at /home/user/.config/retroarch/config/Beetle PSX HW/Beetle PSX HW.cfg.
[INFO] [overrides] no content-dir-specific overrides found at /home/user/.config/retroarch/config/Beetle PSX HW/PSX.cfg.
[INFO] [overrides] no game-specific overrides found at /home/user/.config/retroarch/config/Beetle PSX HW/crashbandicoot.cfg.
[INFO] Shaders: preset directory: /home/user/.config/retroarch/shaders/presets
[INFO] Shaders: no game-specific preset found at /home/user/.config/retroarch/shaders/presets/Beetle PSX HW/crashbandicoot.cgp.
[INFO] Shaders: no game-specific preset found at /home/user/.config/retroarch/shaders/presets/Beetle PSX HW/crashbandicoot.glslp.
[INFO] Shaders: no content-dir-specific preset found at /home/user/.config/retroarch/shaders/presets/Beetle PSX HW/PSX.cgp.
[INFO] Shaders: no content-dir-specific preset found at /home/user/.config/retroarch/shaders/presets/Beetle PSX HW/PSX.glslp.
[INFO] Shaders: no core-specific preset found at /home/user/.config/retroarch/shaders/presets/Beetle PSX HW/Beetle PSX HW.cgp.
[INFO] Shaders: no core-specific preset found at /home/user/.config/retroarch/shaders/presets/Beetle PSX HW/Beetle PSX HW.glslp.
[INFO] Environ SET_VARIABLES.
[INFO] Environ SET_CONTROLLER_INFO.
[INFO] Controller port: 1
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Controller port: 2
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Controller port: 3
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Controller port: 4
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Controller port: 5
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Controller port: 6
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Controller port: 7
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Controller port: 8
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Remaps: remap directory: /home/user/.config/retroarch/config/remaps
[INFO] Remaps: no game-specific remap found at /home/user/.config/retroarch/config/remaps/Beetle PSX HW/crashbandicoot.rmp.
[INFO] Remaps: no content-dir-specific remap found at /home/user/.config/retroarch/config/remaps/Beetle PSX HW/PSX.rmp.
[INFO] Remaps: no core-specific remap found at /home/user/.config/retroarch/config/remaps/Beetle PSX HW/Beetle PSX HW.rmp.
[INFO] Redirecting save file to "/run/user/1000/gvfs/smb-share:server=192.168.2.5,share=clementine/Games/Sony/PSX/crashbandicoot.srm".
[INFO] Redirecting savestate to "/run/user/1000/gvfs/smb-share:server=192.168.2.5,share=clementine/Games/Sony/PSX/crashbandicoot.state".
[INFO] Environ GET_LOG_INTERFACE.
[INFO] Environ SYSTEM_DIRECTORY: "/home/user/retroarch".
[INFO] Environ SET_DISK_CONTROL_INTERFACE.
[INFO] Environ GET_PERF_INTERFACE.
[INFO] Environ PERFORMANCE_LEVEL: 15.
[INFO] Content loading skipped. Implementation will load it on its own.
[INFO] CRC32: 0x7555f9bc .
[INFO] Environ SET_INPUT_DESCRIPTORS:
[INFO]  RetroPad, User 1, Button "B (bottom)" => "Cross"
[INFO]  RetroPad, User 1, Button "Y (left)" => "Square"
[INFO]  RetroPad, User 1, Button "Select" => "Select"
[INFO]  RetroPad, User 1, Button "Start" => "Start"
[INFO]  RetroPad, User 1, Button "D-Pad Up" => "D-Pad Up"
[INFO]  RetroPad, User 1, Button "D-Pad Down" => "D-Pad Down"
[INFO]  RetroPad, User 1, Button "D-Pad Left" => "D-Pad Left"
[INFO]  RetroPad, User 1, Button "D-Pad Right" => "D-Pad Right"
[INFO]  RetroPad, User 1, Button "A (right)" => "Circle"
[INFO]  RetroPad, User 1, Button "X (up)" => "Triangle"
[INFO]  RetroPad, User 1, Button "L" => "L1"
[INFO]  RetroPad, User 1, Button "R" => "R1"
[INFO]  RetroPad, User 1, Button "L2" => "L2"
[INFO]  RetroPad, User 1, Button "R2" => "R2"
[INFO]  RetroPad, User 1, Button "L3" => "L3"
[INFO]  RetroPad, User 1, Button "R3" => "R3"
[INFO]  RetroPad, User 2, Button "B (bottom)" => "Cross"
[INFO]  RetroPad, User 2, Button "Y (left)" => "Square"
[INFO]  RetroPad, User 2, Button "Select" => "Select"
[INFO]  RetroPad, User 2, Button "Start" => "Start"
[INFO]  RetroPad, User 2, Button "D-Pad Up" => "D-Pad Up"
[INFO]  RetroPad, User 2, Button "D-Pad Down" => "D-Pad Down"
[INFO]  RetroPad, User 2, Button "D-Pad Left" => "D-Pad Left"
[INFO]  RetroPad, User 2, Button "D-Pad Right" => "D-Pad Right"
[INFO]  RetroPad, User 2, Button "A (right)" => "Circle"
[INFO]  RetroPad, User 2, Button "X (up)" => "Triangle"
[INFO]  RetroPad, User 2, Button "L" => "L1"
[INFO]  RetroPad, User 2, Button "R" => "R1"
[INFO]  RetroPad, User 2, Button "L2" => "L2"
[INFO]  RetroPad, User 2, Button "R2" => "R2"
[INFO]  RetroPad, User 2, Button "L3" => "L3"
[INFO]  RetroPad, User 2, Button "R3" => "R3"
[INFO]  RetroPad, User 3, Button "B (bottom)" => "Cross"
[INFO]  RetroPad, User 3, Button "Y (left)" => "Square"
[INFO]  RetroPad, User 3, Button "Select" => "Select"
[INFO]  RetroPad, User 3, Button "Start" => "Start"
[INFO]  RetroPad, User 3, Button "D-Pad Up" => "D-Pad Up"
[INFO]  RetroPad, User 3, Button "D-Pad Down" => "D-Pad Down"
[INFO]  RetroPad, User 3, Button "D-Pad Left" => "D-Pad Left"
[INFO]  RetroPad, User 3, Button "D-Pad Right" => "D-Pad Right"
[INFO]  RetroPad, User 3, Button "A (right)" => "Circle"
[INFO]  RetroPad, User 3, Button "X (up)" => "Triangle"
[INFO]  RetroPad, User 3, Button "L" => "L1"
[INFO]  RetroPad, User 3, Button "R" => "R1"
[INFO]  RetroPad, User 3, Button "L2" => "L2"
[INFO]  RetroPad, User 3, Button "R2" => "R2"
[INFO]  RetroPad, User 3, Button "L3" => "L3"
[INFO]  RetroPad, User 3, Button "R3" => "R3"
[INFO]  RetroPad, User 4, Button "B (bottom)" => "Cross"
[INFO]  RetroPad, User 4, Button "Y (left)" => "Square"
[INFO]  RetroPad, User 4, Button "Select" => "Select"
[INFO]  RetroPad, User 4, Button "Start" => "Start"
[INFO]  RetroPad, User 4, Button "D-Pad Up" => "D-Pad Up"
[INFO]  RetroPad, User 4, Button "D-Pad Down" => "D-Pad Down"
[INFO]  RetroPad, User 4, Button "D-Pad Left" => "D-Pad Left"
[INFO]  RetroPad, User 4, Button "D-Pad Right" => "D-Pad Right"
[INFO]  RetroPad, User 4, Button "A (right)" => "Circle"
[INFO]  RetroPad, User 4, Button "X (up)" => "Triangle"
[INFO]  RetroPad, User 4, Button "L" => "L1"
[INFO]  RetroPad, User 4, Button "R" => "R1"
[INFO]  RetroPad, User 4, Button "L2" => "L2"
[INFO]  RetroPad, User 4, Button "R2" => "R2"
[INFO]  RetroPad, User 4, Button "L3" => "L3"
[INFO]  RetroPad, User 4, Button "R3" => "R3"
[INFO]  RetroPad, User 5, Button "B (bottom)" => "Cross"
[INFO]  RetroPad, User 5, Button "Y (left)" => "Square"
[INFO]  RetroPad, User 5, Button "Select" => "Select"
[INFO]  RetroPad, User 5, Button "Start" => "Start"
[INFO]  RetroPad, User 5, Button "D-Pad Up" => "D-Pad Up"
[INFO]  RetroPad, User 5, Button "D-Pad Down" => "D-Pad Down"
[INFO]  RetroPad, User 5, Button "D-Pad Left" => "D-Pad Left"
[INFO]  RetroPad, User 5, Button "D-Pad Right" => "D-Pad Right"
[INFO]  RetroPad, User 5, Button "A (right)" => "Circle"
[INFO]  RetroPad, User 5, Button "X (up)" => "Triangle"
[INFO]  RetroPad, User 5, Button "L" => "L1"
[INFO]  RetroPad, User 5, Button "R" => "R1"
[INFO]  RetroPad, User 5, Button "L2" => "L2"
[INFO]  RetroPad, User 5, Button "R2" => "R2"
[INFO]  RetroPad, User 5, Button "L3" => "L3"
[INFO]  RetroPad, User 5, Button "R3" => "R3"
[INFO] Environ GET_RUMBLE_INTERFACE.
[libretro INFO] Rumble interface supported!
[INFO] Environ SET_PIXEL_FORMAT: XRGB8888.
[INFO] Environ GET_VARIABLE beetle_psx_hw_cd_access_method:
[INFO]  sync
[INFO] Environ GET_VARIABLE beetle_psx_hw_cpu_freq_scale:
[INFO]  100% (native)
[INFO] Environ GET_VARIABLE beetle_psx_hw_gte_overclock:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_gpu_overclock:
[INFO]  1x(native)
[INFO] Environ GET_VARIABLE beetle_psx_hw_skip_bios:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_widescreen_hack:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_enable_memcard1:
[INFO]  enabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_analog_calibration:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_renderer:
[INFO]  hardware
[INFO] Environ GET_VARIABLE beetle_psx_hw_dither_mode:
[INFO]  1x(native)
[INFO] Environ GET_VARIABLE beetle_psx_hw_pgxp_mode:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_pgxp_vertex:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_pgxp_texture:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_lineRender:
[INFO]  default
[INFO] Environ GET_VARIABLE beetle_psx_hw_filter:
[INFO]  nearest
[INFO] Environ GET_VARIABLE beetle_psx_hw_analog_toggle:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_enable_multitap_port1:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_enable_multitap_port2:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_mouse_sensitivity:
[INFO]  100%
[INFO] Environ GET_VARIABLE beetle_psx_hw_gun_cursor:
[INFO]  Cross
[INFO] Environ GET_VARIABLE beetle_psx_hw_negcon_deadzone:
[INFO]  0
[INFO] Environ GET_VARIABLE beetle_psx_hw_negcon_response:
[INFO]  linear
[INFO] Environ GET_VARIABLE beetle_psx_hw_initial_scanline:
[INFO]  0
[INFO] Environ GET_VARIABLE beetle_psx_hw_last_scanline:
[INFO]  239
[INFO] Environ GET_VARIABLE beetle_psx_hw_initial_scanline_pal:
[INFO]  0
[INFO] Environ GET_VARIABLE beetle_psx_hw_last_scanline_pal:
[INFO]  287
[INFO] Environ GET_VARIABLE beetle_psx_hw_use_mednafen_memcard0_method:
[INFO]  libretro
[INFO] Environ GET_VARIABLE beetle_psx_hw_shared_memory_cards:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_frame_duping:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_display_internal_fps:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_crop_overscan:
[INFO]  enabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_image_offset:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_image_crop:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_cd_fastload:
[INFO]  2x (native)
[libretro INFO] Loading /run/user/1000/gvfs/smb-share:server=192.168.2.5,share=clementine/Games/Sony/PSX/crashbandicoot.cue...
unhandled setting UI: psx.input.port1.gun_chairs
unhandled setting UI: psx.input.port2.gun_chairs
unhandled setting UI: psx.input.port3.gun_chairs
unhandled setting UI: psx.input.port4.gun_chairs
unhandled setting UI: psx.input.port5.gun_chairs
unhandled setting UI: psx.input.port6.gun_chairs
unhandled setting UI: psx.input.port7.gun_chairs
unhandled setting UI: psx.input.port8.gun_chairs
[libretro INFO] Checking if required firmware is present.
[libretro INFO] Firmware found: /home/user/retroarch/scph5501.bin
[libretro INFO] Firmware SHA1: 0555C6FAE8906F3F09BAF5988F00E55F88E9F30B
[INFO] Environ GET_VARIABLE beetle_psx_hw_renderer:
[INFO]  hardware
[INFO] Environ SET_HW_RENDER.
[INFO] Requesting Vulkan context.
[INFO] Environ SET_PIXEL_FORMAT: XRGB8888.
[INFO] Environ SET_HW_RENDER.
[INFO] Requesting core OpenGL context (3.3).
[INFO] Skipping SRAM load..
[INFO] Version of libretro API: 1
[INFO] Compiled against API: 1
[INFO] Environ GET_VARIABLE beetle_psx_hw_internal_resolution:
[INFO]  4x
[INFO] Environ GET_VARIABLE beetle_psx_hw_display_vram:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_widescreen_hack:
[INFO]  disabled
[INFO] [Audio]: Set audio input rate to: 44100.00 Hz.
[INFO] [Video]: Timings deviate too much. Will not adjust. (Display = 29.49 Hz, Game = 59.94 Hz)
[INFO] [Video]: Game FPS > Monitor FPS. Cannot rely on VSync.
[INFO] [Video]: Video @ fullscreen
[INFO] [Video]: Using HW render, OpenGL driver forced.
[ERROR] [Wayland]: Failed to connect to Wayland server.
[INFO] [GLX]: GLX_EXT_swap_control_tear supported.
[INFO] [GL]: Found GL context: x
[INFO] [GL]: Detecting screen resolution 1360x768.
[INFO] [GLX]: Window manager is GNOME Shell.
[INFO] [XINERAMA]: Xinerama version: 1.1.
[INFO] [XINERAMA]: Xinerama screens: 1.
[INFO] [GLX]: Using Xinerama on screen #0.
[INFO] [GLX]: X = 0, Y = 0, W = 1360, H = 768.
[INFO] [GLX]: Using windowed fullscreen.
[INFO] [GLX]: Found swap function: glXSwapIntervalEXT.
[INFO] [GLX]: glXSwapIntervalEXT(0)
[INFO] [GL]: Vendor: NVIDIA Corporation, Renderer: GeForce GT 740/PCIe/SSE2.
[INFO] [GL]: Version: 3.3.0 NVIDIA 415.18.
[INFO] [GL]: Using Core GL context, setting up VAO...
[INFO] [GL]: Using resolution 1360x768
[INFO] [GL]: Default shader backend found: glsl.
[INFO] [Shader driver]: Using GLSL shader backend.
[INFO] [GLSL]: Checking GLSL shader support ...
[WARN] [GL]: Stock GLSL shaders will be used.
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Linking GLSL program.
[INFO] Setting up menu pipeline shaders for XMB ... 
[INFO] [GLSL]: Compiling ribbon shader..
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Compiling simple ribbon shader..
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Compiling snow shader..
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Compiling modern snow shader..
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Compiling bokeh shader..
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Compiling snowflake shader..
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] [GLSL]: Using GLSL version 330.
[INFO] [GLSL]: Linking GLSL program.
[INFO] Resetting shader to defaults ... 
[INFO] [GL]: Using 1 textures.
[INFO] [GL]: Loaded 1 program(s).
[INFO] [GL]: Initializing HW render (4096 x 4096).
[INFO] [GL]: Max texture size: 16384 px, renderbuffer size: 16384 px.
[INFO] [GL]: Supports FBO (render-to-texture).
[INFO] [Joypad]: Found joypad driver: "udev".
[INFO] [Font]: Using font rendering backend: freetype.
[INFO] [X11]: Suspending screensaver (X11, xdg-screensaver).
[INFO] [Video]: Found display server: x11
[libretro INFO] gl_context_reset called.
[INFO] Environ GET_VARIABLE beetle_psx_hw_internal_resolution:
[INFO]  4x
[INFO] Environ GET_VARIABLE beetle_psx_hw_display_vram:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_filter:
[INFO]  nearest
[INFO] Environ GET_VARIABLE beetle_psx_hw_depth:
[INFO]  dithered 16bpp (native)
[INFO] Environ GET_VARIABLE beetle_psx_hw_dither_mode:
[INFO]  1x(native)
[INFO] Environ GET_VARIABLE beetle_psx_hw_wireframe:
[INFO]  disabled
[libretro INFO] Building OpenGL state (4x internal res., 16bpp)
[libretro INFO] Binding program for first time: 30
[libretro INFO] Unbinding program for first time: 30
[libretro INFO] Binding program for first time: 31
[libretro INFO] Unbinding program for first time: 31
[libretro INFO] Binding program for first time: 32
[libretro INFO] Unbinding program for first time: 32
[INFO] [OpenAL]: Using 11 buffers of 1024 bytes.
[INFO] [Font]: Using font rendering backend: freetype.
[INFO] [Font]: Using font rendering backend: freetype.
Protocol error: bad 3 (Window); Sequence Number 11
 Opcode (20, 0) = GetProperty
 Bad resource 0 (0x0)
 at -e line 15.
[INFO] [LED]: LED driver = 'null' 0x55d7339ef380
[INFO] [MIDI]: Initializing ...
[INFO] [MIDI]: Input disabled.
[INFO] [MIDI]: Output disabled.
[INFO] [MIDI]: Initialized "null" driver.
[libretro INFO] Controller 1: PlayStation Controller
[libretro INFO] Controller 2: PlayStation Controller
[libretro INFO] Controller 3: PlayStation Controller
[libretro INFO] Controller 4: PlayStation Controller
[libretro INFO] Controller 5: PlayStation Controller
[libretro INFO] Controller 6: PlayStation Controller
[libretro INFO] Controller 7: PlayStation Controller
[libretro INFO] Controller 8: PlayStation Controller
[INFO] Loading history file: [/home/user/.config/retroarch/content_history.lpl].
[INFO] Loading history file: [/home/user/.config/retroarch/content_favorites.lpl].
[INFO] Loading history file: [/home/user/.config/retroarch/content_music_history.lpl].
[INFO] Loading history file: [/home/user/.config/retroarch/content_video_history.lpl].
[INFO] Loading history file: [/home/user/.config/retroarch/content_image_history.lpl].
[INFO] [GL]: VSync => off
[INFO] [GLX]: glXSwapIntervalEXT(0)
[INFO] Written to playlist file: /home/user/.config/retroarch/content_history.lpl
[INFO] Environ SET_VARIABLES.
[INFO] Saved core options file to "/home/user/.config/retroarch/retroarch-core-options.cfg"
[INFO] Environ SET_CONTROLLER_INFO.
[INFO] Controller port: 1
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Controller port: 2
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Controller port: 3
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Controller port: 4
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Controller port: 5
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Controller port: 6
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Controller port: 7
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Controller port: 8
[INFO]    PlayStation Controller (ID: 1)
[INFO]    DualShock (ID: 517)
[INFO]    Analog Controller (ID: 261)
[INFO]    Analog Joystick (ID: 773)
[INFO]    Guncon / G-Con 45 (ID: 260)
[INFO]    Justifier (ID: 516)
[INFO]    Mouse (ID: 258)
[INFO]    neGcon (ID: 1029)
[INFO]    (null) (ID: 0)
[INFO] Environ GET_LOG_INTERFACE.
[INFO] Environ SYSTEM_DIRECTORY: "/home/user/retroarch".
[INFO] Environ SET_DISK_CONTROL_INTERFACE.
[INFO] Environ GET_PERF_INTERFACE.
[INFO] Environ PERFORMANCE_LEVEL: 15.
[INFO] Environ SET_INPUT_DESCRIPTORS:
[INFO]  RetroPad, User 1, Button "B (bottom)" => "Cross"
[INFO]  RetroPad, User 1, Button "Y (left)" => "Square"
[INFO]  RetroPad, User 1, Button "Select" => "Select"
[INFO]  RetroPad, User 1, Button "Start" => "Start"
[INFO]  RetroPad, User 1, Button "D-Pad Up" => "D-Pad Up"
[INFO]  RetroPad, User 1, Button "D-Pad Down" => "D-Pad Down"
[INFO]  RetroPad, User 1, Button "D-Pad Left" => "D-Pad Left"
[INFO]  RetroPad, User 1, Button "D-Pad Right" => "D-Pad Right"
[INFO]  RetroPad, User 1, Button "A (right)" => "Circle"
[INFO]  RetroPad, User 1, Button "X (up)" => "Triangle"
[INFO]  RetroPad, User 1, Button "L" => "L1"
[INFO]  RetroPad, User 1, Button "R" => "R1"
[INFO]  RetroPad, User 1, Button "L2" => "L2"
[INFO]  RetroPad, User 1, Button "R2" => "R2"
[INFO]  RetroPad, User 1, Button "L3" => "L3"
[INFO]  RetroPad, User 1, Button "R3" => "R3"
[INFO]  RetroPad, User 2, Button "B (bottom)" => "Cross"
[INFO]  RetroPad, User 2, Button "Y (left)" => "Square"
[INFO]  RetroPad, User 2, Button "Select" => "Select"
[INFO]  RetroPad, User 2, Button "Start" => "Start"
[INFO]  RetroPad, User 2, Button "D-Pad Up" => "D-Pad Up"
[INFO]  RetroPad, User 2, Button "D-Pad Down" => "D-Pad Down"
[INFO]  RetroPad, User 2, Button "D-Pad Left" => "D-Pad Left"
[INFO]  RetroPad, User 2, Button "D-Pad Right" => "D-Pad Right"
[INFO]  RetroPad, User 2, Button "A (right)" => "Circle"
[INFO]  RetroPad, User 2, Button "X (up)" => "Triangle"
[INFO]  RetroPad, User 2, Button "L" => "L1"
[INFO]  RetroPad, User 2, Button "R" => "R1"
[INFO]  RetroPad, User 2, Button "L2" => "L2"
[INFO]  RetroPad, User 2, Button "R2" => "R2"
[INFO]  RetroPad, User 2, Button "L3" => "L3"
[INFO]  RetroPad, User 2, Button "R3" => "R3"
[INFO]  RetroPad, User 3, Button "B (bottom)" => "Cross"
[INFO]  RetroPad, User 3, Button "Y (left)" => "Square"
[INFO]  RetroPad, User 3, Button "Select" => "Select"
[INFO]  RetroPad, User 3, Button "Start" => "Start"
[INFO]  RetroPad, User 3, Button "D-Pad Up" => "D-Pad Up"
[INFO]  RetroPad, User 3, Button "D-Pad Down" => "D-Pad Down"
[INFO]  RetroPad, User 3, Button "D-Pad Left" => "D-Pad Left"
[INFO]  RetroPad, User 3, Button "D-Pad Right" => "D-Pad Right"
[INFO]  RetroPad, User 3, Button "A (right)" => "Circle"
[INFO]  RetroPad, User 3, Button "X (up)" => "Triangle"
[INFO]  RetroPad, User 3, Button "L" => "L1"
[INFO]  RetroPad, User 3, Button "R" => "R1"
[INFO]  RetroPad, User 3, Button "L2" => "L2"
[INFO]  RetroPad, User 3, Button "R2" => "R2"
[INFO]  RetroPad, User 3, Button "L3" => "L3"
[INFO]  RetroPad, User 3, Button "R3" => "R3"
[INFO]  RetroPad, User 4, Button "B (bottom)" => "Cross"
[INFO]  RetroPad, User 4, Button "Y (left)" => "Square"
[INFO]  RetroPad, User 4, Button "Select" => "Select"
[INFO]  RetroPad, User 4, Button "Start" => "Start"
[INFO]  RetroPad, User 4, Button "D-Pad Up" => "D-Pad Up"
[INFO]  RetroPad, User 4, Button "D-Pad Down" => "D-Pad Down"
[INFO]  RetroPad, User 4, Button "D-Pad Left" => "D-Pad Left"
[INFO]  RetroPad, User 4, Button "D-Pad Right" => "D-Pad Right"
[INFO]  RetroPad, User 4, Button "A (right)" => "Circle"
[INFO]  RetroPad, User 4, Button "X (up)" => "Triangle"
[INFO]  RetroPad, User 4, Button "L" => "L1"
[INFO]  RetroPad, User 4, Button "R" => "R1"
[INFO]  RetroPad, User 4, Button "L2" => "L2"
[INFO]  RetroPad, User 4, Button "R2" => "R2"
[INFO]  RetroPad, User 4, Button "L3" => "L3"
[INFO]  RetroPad, User 4, Button "R3" => "R3"
[INFO]  RetroPad, User 5, Button "B (bottom)" => "Cross"
[INFO]  RetroPad, User 5, Button "Y (left)" => "Square"
[INFO]  RetroPad, User 5, Button "Select" => "Select"
[INFO]  RetroPad, User 5, Button "Start" => "Start"
[INFO]  RetroPad, User 5, Button "D-Pad Up" => "D-Pad Up"
[INFO]  RetroPad, User 5, Button "D-Pad Down" => "D-Pad Down"
[INFO]  RetroPad, User 5, Button "D-Pad Left" => "D-Pad Left"
[INFO]  RetroPad, User 5, Button "D-Pad Right" => "D-Pad Right"
[INFO]  RetroPad, User 5, Button "A (right)" => "Circle"
[INFO]  RetroPad, User 5, Button "X (up)" => "Triangle"
[INFO]  RetroPad, User 5, Button "L" => "L1"
[INFO]  RetroPad, User 5, Button "R" => "R1"
[INFO]  RetroPad, User 5, Button "L2" => "L2"
[INFO]  RetroPad, User 5, Button "R2" => "R2"
[INFO]  RetroPad, User 5, Button "L3" => "L3"
[INFO]  RetroPad, User 5, Button "R3" => "R3"
[INFO] Environ GET_RUMBLE_INTERFACE.
[libretro INFO] Rumble interface supported!
[INFO] Environ SET_PIXEL_FORMAT: XRGB8888.
[INFO] Environ GET_VARIABLE beetle_psx_hw_cd_access_method:
[INFO]  sync
[INFO] Environ GET_VARIABLE beetle_psx_hw_cpu_freq_scale:
[INFO]  100% (native)
[INFO] Environ GET_VARIABLE beetle_psx_hw_gte_overclock:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_gpu_overclock:
[INFO]  1x(native)
[INFO] Environ GET_VARIABLE beetle_psx_hw_skip_bios:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_widescreen_hack:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_enable_memcard1:
[INFO]  enabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_analog_calibration:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_renderer:
[INFO]  hardware
[INFO] Environ GET_VARIABLE beetle_psx_hw_dither_mode:
[INFO]  1x(native)
[INFO] Environ GET_VARIABLE beetle_psx_hw_pgxp_mode:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_pgxp_vertex:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_pgxp_texture:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_lineRender:
[INFO]  default
[INFO] Environ GET_VARIABLE beetle_psx_hw_filter:
[INFO]  nearest
[INFO] Environ GET_VARIABLE beetle_psx_hw_analog_toggle:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_enable_multitap_port1:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_enable_multitap_port2:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_mouse_sensitivity:
[INFO]  100%
[INFO] Environ GET_VARIABLE beetle_psx_hw_gun_cursor:
[INFO]  Cross
[INFO] Environ GET_VARIABLE beetle_psx_hw_negcon_deadzone:
[INFO]  0
[INFO] Environ GET_VARIABLE beetle_psx_hw_negcon_response:
[INFO]  linear
[INFO] Environ GET_VARIABLE beetle_psx_hw_initial_scanline:
[INFO]  0
[INFO] Environ GET_VARIABLE beetle_psx_hw_last_scanline:
[INFO]  239
[INFO] Environ GET_VARIABLE beetle_psx_hw_initial_scanline_pal:
[INFO]  0
[INFO] Environ GET_VARIABLE beetle_psx_hw_last_scanline_pal:
[INFO]  287
[INFO] Environ GET_VARIABLE beetle_psx_hw_use_mednafen_memcard0_method:
[INFO]  libretro
[INFO] Environ GET_VARIABLE beetle_psx_hw_shared_memory_cards:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_frame_duping:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_display_internal_fps:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_crop_overscan:
[INFO]  enabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_image_offset:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_image_crop:
[INFO]  disabled
[INFO] Environ GET_VARIABLE beetle_psx_hw_cd_fastload:
[INFO]  2x (native)
[libretro INFO] Loading /run/user/1000/gvfs/smb-share:server=192.168.2.5,share=clementine/Games/Sony/PSX/crashbandicoot.cue...
unhandled setting UI: psx.input.port1.gun_chairs
unhandled setting UI: psx.input.port2.gun_chairs
unhandled setting UI: psx.input.port3.gun_chairs
unhandled setting UI: psx.input.port4.gun_chairs
unhandled setting UI: psx.input.port5.gun_chairs
unhandled setting UI: psx.input.port6.gun_chairs
unhandled setting UI: psx.input.port7.gun_chairs
unhandled setting UI: psx.input.port8.gun_chairs
[libretro INFO] Checking if required firmware is present.
[libretro INFO] Firmware found: /home/user/retroarch/scph5501.bin
[libretro INFO] Firmware SHA1: 0555C6FAE8906F3F09BAF5988F00E55F88E9F30B
[INFO] Environ GET_VARIABLE beetle_psx_hw_renderer:
[INFO]  hardware
[INFO] Environ SET_HW_RENDER.
[INFO] Requesting Vulkan context.
[INFO] Environ SET_PIXEL_FORMAT: XRGB8888.
[INFO] Environ SET_HW_RENDER.
[INFO] Requesting core OpenGL context (3.3).
[libretro INFO] Controller 1: PlayStation Controller
[libretro INFO] Controller 2: PlayStation Controller
[libretro INFO] Controller 3: PlayStation Controller
[libretro INFO] Controller 4: PlayStation Controller
[libretro INFO] Controller 5: PlayStation Controller
[libretro INFO] Controller 6: PlayStation Controller
[libretro INFO] Controller 7: PlayStation Controller
[libretro INFO] Controller 8: PlayStation Controller
[libretro INFO] Target framebuffer size: 1024x960
[INFO] Environ SET_GEOMETRY.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
...
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[INFO] [Discord] updating (2)
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
...
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro INFO] Target framebuffer size: 2560x956
[INFO] Environ SET_GEOMETRY.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
...
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro INFO] Target framebuffer size: 1024x960
[INFO] Environ SET_GEOMETRY.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
...
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[libretro INFO] Target framebuffer size: 2560x1912
[INFO] Environ SET_GEOMETRY.
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
...
[libretro ERROR] [rsx_gl_prepare_frame] Renderer state marked as valid but state data is null.
[INFO] [Discord] shutting down ..
[INFO] [Config]: Saved new config to "/home/user/.config/retroarch/retroarch.cfg".
[INFO] Saving RAM type #0 to "/run/user/1000/gvfs/smb-share:server=192.168.2.5,share=clementine/Games/Sony/PSX/crashbandicoot.srm".
[INFO] Saved successfully to "/run/user/1000/gvfs/smb-share:server=192.168.2.5,share=clementine/Games/Sony/PSX/crashbandicoot.srm".
[INFO] Unloading game..
[libretro INFO] gl_context_destroy called.
[libretro INFO] [Beetle PSX HW]: Samples / Frame: 736.64247
[libretro INFO] [Beetle PSX HW]: Estimated FPS: 59.86622
[INFO] Unloading core..
[libretro INFO] [Beetle PSX HW]: Samples / Frame: 741.58904
[libretro INFO] [Beetle PSX HW]: Estimated FPS: 59.46690
[INFO] Unloading core symbols..
[INFO] Saved core options file to "/home/user/.config/retroarch/retroarch-core-options.cfg"
[INFO] [XINERAMA]: Xinerama version: 1.1.
[INFO] [XINERAMA]: Xinerama screens: 1.
[INFO] [XINERAMA]: Saved monitor #0.
[INFO] [Video]: Does not have enough samples for monitor refresh rate estimation. Requires to run for at least 4096 frames.
[INFO] [Video]: Does not have enough samples for monitor refresh rate estimation. Requires to run for at least 4096 frames.

Environment information

rz5 commented 5 years ago

I see old option names on that list due to the names having been changed over time. Store your core option and retroarch config files elsewhere and do a fresh start to see if you still get those crashes.

treymerkley commented 5 years ago

I just renamed them to cfg.old. Vulkan produces the same behavior, but GL hangs, doing

Can't locate Net/DBus.pm in @INC (you may need to install the Net::DBus module) (@INC contains: /usr/lib/perl5/5.28/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/5.28/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/5.28/core_perl /usr/share/perl5/core_perl) at -e line 5.
BEGIN failed--compilation aborted at -e line 5.
unhandled setting UI: psx.input.port1.gun_chairs
unhandled setting UI: psx.input.port2.gun_chairs
unhandled setting UI: psx.input.port3.gun_chairs
unhandled setting UI: psx.input.port4.gun_chairs
unhandled setting UI: psx.input.port5.gun_chairs
unhandled setting UI: psx.input.port6.gun_chairs
unhandled setting UI: psx.input.port7.gun_chairs
unhandled setting UI: psx.input.port8.gun_chairs
Can't locate Net/DBus.pm in @INC (you may need to install the Net::DBus module) (@INC contains: /usr/lib/perl5/5.28/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/5.28/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/5.28/core_perl /usr/share/perl5/core_perl) at -e line 5.
BEGIN failed--compilation aborted at -e line 5.

EDIT: just tried this again. the actual offending message is

Protocol error: bad 3 (Window); Sequence Number 11
 Opcode (20, 0) = GetProperty
 Bad resource 0 (0x0)
 at -e line 15.
rz5 commented 5 years ago

@billywade - Is this only happening with this core?

Based on the first and last couple of lines of the latest log you posted, I think this bug is caused by your OS and maybe your desktop environment (I assume it's GNOME). I see other users getting further by installing the perl packages "perl-net-dbus" and "perl-x11-protocol". Beyond that point, I wouldn't know what to do, but all of this seems to be unrelated to beetle-psx specifically.

treymerkley commented 5 years ago

@rz5 It's only a problem with this core, and after installing the required packages, there was no change. Interestingly, rendering with software works, so my guess is that the hardware end is having trouble interacting with my graphics card to render. I looked around, and it looks like this issue is only raised when !renderer. I don't know a lot about logic in C++, but I figure that means the GL renderer is missing, although I don't know how. I also couldn't find where renderer is declared/set, so I couldn't figure out what might be happening to cause this.

EDIT: I also tried outright deleting all of my core options for this core. I get audio but no image.

treymerkley commented 5 years ago

I just tried building commit 7dd2bf7996136d69c8a2577d46d0e0905527f624 from issue #377 because that was the last working version I tried to make sure it wasn't some sort of regression. The older version gives the same error.

treymerkley commented 5 years ago

I tested mednafen upstream and it's running, so I figure it's a core issue. I kind of assumed that from the LIBRETRO label but I wanted to double check. Also, the problem is still occurring, as of 616a563.

inactive123 commented 5 years ago

You're comparing apples to oranges though. Mednafen upstream does not even have a GL or Vulkan renderer, so I don't know how you can really realistically compare it against that.

If anything, comparing Beetle PSX (non-HW) to Mednafen upstream would be a more fair comparison. And most likely you wouldn't get this error with that.

So what I'm trying to say is that this is uncharted territory and you simply cannot make these surface-level comparisons to Beetle PSX HW and Mednafen upstream.

rz5 commented 5 years ago

@billywade - The new error messages you posted still sound like problems related specifically to perl packages. And this core does not do anything special when compared to mupen64plus-libretro or reicast-libretro.

How are you getting this core and RetroArch? Are you building from source or getting it prebuilt from the Arch Community repository?

treymerkley commented 5 years ago

@twinaphex yeah, that's fair. It was mostly a guess on how to debug this, I knew it wouldn't mean a whole lot.

treymerkley commented 5 years ago

@rz5 I've been building from here, trying the AUR build, trying the prebuilt in the repos, and using the core updater versions.

I haven't been posting whole logs, that's my mistake, but since installing the perl packages I haven't gotten any new perl errors, these are from before. It looks like the window error that I renamed this as is the real problem. I just put a full log at the end of my original post so you can look around.

bearoso commented 5 years ago

EDIT: just tried this again. the actual offending message is

Protocol error: bad 3 (Window); Sequence Number 11
 Opcode (20, 0) = GetProperty
 Bad resource 0 (0x0)
 at -e line 15.

I think that’s just coming from xdg-screensaver, and it’ll go away if you turn off the block screensaver option. That’s not going to be the source of the problem.

I’d try toggling the shared HW context option to see if that helps.

It looks like the core is requesting hardware rendering, not getting it, but assuming it did.

What does glxinfo report your OpenGL version is?

treymerkley commented 5 years ago

@bearoso You're right on the xdg-screensaver, I toggled that and it went away.

Shared HW context was off, so I turned it on, but there was no change in behavior. It looks like a generally useful option, though, so I'm just going to leave it on.

As for OpenGL, this is what looks to be the version: OpenGL version string: 4.6.0 NVIDIA 415.18

Thanks for your help!

bearoso commented 5 years ago

I think I see what's going on. Your Vulkan setup is somehow broken, so it's not working, period. However, the beetle core requests Vulkan first with the SET_HW_RENDER callback function and it fails, and for some reason it breaks something. On the subsequent SET_HW_RENDER call with OpenGL interface, Retroarch doesn't seem to do anything.

Try changing

    if (!params->environ_cb(RETRO_ENVIRONMENT_SET_HW_RENDER, &hw_render))
      return false;

to

    if (!params->environ_cb(RETRO_ENVIRONMENT_SET_HW_RENDER, &hw_render))
    {
       hw_render.context_type = RETRO_HW_CONTEXT_NONE;
       params->environ_cb(RETRO_ENVIRONMENT_SET_HW_RENDER, &hw_render);
       return false;
    }

in libretro-common/glsm/glsm.c:2849 in your beetle-psx-libretro source tree. That might get Retroarch to recognize the second call and get OpenGL working. edit If you just build with HAVE_VULKAN=0 to disable it, that should also tell you if Vulkan is screwing up GL.

As for Vulkan, post the output of vulkaninfo here.

treymerkley commented 5 years ago

Okay, so I tried changing it like you said, but there was no change on the output or behavior. As for vulkaninfo,

==========
VULKANINFO
==========

Vulkan Instance Version: 1.1.85

ERROR: [Loader Message] Code 0 : /usr/lib32/libvulkan_radeon.so: wrong ELF class: ELFCLASS32

Instance Extensions:
====================
Instance Extensions count = 17
    VK_EXT_acquire_xlib_display         : extension revision  1
    VK_EXT_debug_report                 : extension revision  9
    VK_EXT_debug_utils                  : extension revision  1
    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_wayland_surface              : extension revision  6
    VK_KHR_xcb_surface                  : extension revision  6
    VK_KHR_xlib_surface                 : extension revision  6
Layers: count = 8
=======
VK_LAYER_GOOGLE_threading (Google Validation Layer) Vulkan version 1.1.92, layer version 1
    Layer Extensions    count = 1
        VK_EXT_debug_report                 : extension revision  6
    Devices     count = 1
        GPU id       : 0 (GeForce GT 740)
        Layer-Device Extensions count = 0

VK_LAYER_GOOGLE_unique_objects (Google Validation Layer) Vulkan version 1.1.92, layer version 1
    Layer Extensions    count = 0
    Devices     count = 1
        GPU id       : 0 (GeForce GT 740)
        Layer-Device Extensions count = 0

VK_LAYER_LUNARG_core_validation (LunarG Validation Layer) Vulkan version 1.1.92, layer version 1
    Layer Extensions    count = 1
        VK_EXT_debug_report                 : extension revision  6
    Devices     count = 1
        GPU id       : 0 (GeForce GT 740)
        Layer-Device Extensions count = 2
            VK_EXT_debug_marker                 : extension revision  4
            VK_EXT_validation_cache             : extension revision  1

VK_LAYER_LUNARG_object_tracker (LunarG Validation Layer) Vulkan version 1.1.92, layer version 1
    Layer Extensions    count = 1
        VK_EXT_debug_report                 : extension revision  6
    Devices     count = 1
        GPU id       : 0 (GeForce GT 740)
        Layer-Device Extensions count = 1
            VK_EXT_debug_marker                 : extension revision  4

VK_LAYER_LUNARG_parameter_validation (LunarG Validation Layer) Vulkan version 1.1.92, layer version 1
    Layer Extensions    count = 1
        VK_EXT_debug_report                 : extension revision  6
    Devices     count = 1
        GPU id       : 0 (GeForce GT 740)
        Layer-Device Extensions count = 1
            VK_EXT_debug_marker                 : extension revision  4

VK_LAYER_LUNARG_standard_validation (LunarG Standard Validation) Vulkan version 1.1.92, layer version 1
    Layer Extensions    count = 1
        VK_EXT_debug_report                 : extension revision  6
    Devices     count = 1
        GPU id       : 0 (GeForce GT 740)
        Layer-Device Extensions count = 2
            VK_EXT_debug_marker                 : extension revision  4
            VK_EXT_validation_cache             : extension revision  1

VK_LAYER_VALVE_steam_overlay_32 (Steam Overlay Layer) Vulkan version 1.1.73, layer version 1
    Layer Extensions    count = 0
    Devices     count = 1
        GPU id       : 0 (GeForce GT 740)
        Layer-Device Extensions count = 0

VK_LAYER_VALVE_steam_overlay_64 (Steam Overlay Layer) Vulkan version 1.1.73, layer version 1
    Layer Extensions    count = 0
    Devices     count = 1
        GPU id       : 0 (GeForce GT 740)
        Layer-Device Extensions count = 0

Presentable Surfaces:
=====================
GPU id       : 0 (GeForce GT 740)
Surface type : VK_KHR_xcb_surface
Formats:        count = 2
    B8G8R8A8_UNORM
    B8G8R8A8_SRGB
Present Modes:      count = 3
    FIFO_KHR
    FIFO_RELAXED_KHR
    IMMEDIATE_KHR

VkSurfaceCapabilitiesKHR:
=========================
    minImageCount       = 2
    maxImageCount       = 8
    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
    supportedUsageFlags:
        VK_IMAGE_USAGE_TRANSFER_SRC_BIT
        VK_IMAGE_USAGE_TRANSFER_DST_BIT
        VK_IMAGE_USAGE_SAMPLED_BIT
        VK_IMAGE_USAGE_STORAGE_BIT
        VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
        VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT

VkSurfaceCapabilities2EXT:
==========================
    supportedSurfaceCounters:
        None

Groups :
========
    Device Group Properties (Group 0) :
        physicalDeviceCount = 1

            GeForce GT 740 (ID: 0)

        subsetAllocation = 0

Device Properties and Extensions :
==================================
GPU0
VkPhysicalDeviceProperties:
===========================
    apiVersion     = 0x401054  (1.1.84)
    driverVersion  = 1740931072 (0x67c48000)
    vendorID       = 0x10de
    deviceID       = 0x0fc8
    deviceType     = DISCRETE_GPU
    deviceName     = GeForce GT 740
    VkPhysicalDeviceLimits:
    -----------------------
        maxImageDimension1D                     = 16384
        maxImageDimension2D                     = 16384
        maxImageDimension3D                     = 2048
        maxImageDimensionCube                   = 16384
        maxImageArrayLayers                     = 2048
        maxTexelBufferElements                  = 0x8000000
        maxUniformBufferRange                   = 0x10000
        maxStorageBufferRange                   = 0xffffffff
        maxPushConstantsSize                    = 256
        maxMemoryAllocationCount                = 4294967295
        maxSamplerAllocationCount               = 4000
        bufferImageGranularity                  = 0x10000
        sparseAddressSpaceSize                  = 0xffffffffffffffff
        maxBoundDescriptorSets                  = 32
        maxPerStageDescriptorSamplers           = 1048576
        maxPerStageDescriptorUniformBuffers     = 15
        maxPerStageDescriptorStorageBuffers     = 1048576
        maxPerStageDescriptorSampledImages      = 1048576
        maxPerStageDescriptorStorageImages      = 1048576
        maxPerStageDescriptorInputAttachments   = 1048576
        maxPerStageResources                    = 4294967295
        maxDescriptorSetSamplers                = 1048576
        maxDescriptorSetUniformBuffers          = 90
        maxDescriptorSetUniformBuffersDynamic   = 15
        maxDescriptorSetStorageBuffers          = 1048576
        maxDescriptorSetStorageBuffersDynamic   = 16
        maxDescriptorSetSampledImages           = 1048576
        maxDescriptorSetStorageImages           = 1048576
        maxDescriptorSetInputAttachments        = 1048576
        maxVertexInputAttributes                = 32
        maxVertexInputBindings                  = 32
        maxVertexInputAttributeOffset           = 0x7ff
        maxVertexInputBindingStride             = 0x800
        maxVertexOutputComponents               = 128
        maxTessellationGenerationLevel          = 64
        maxTessellationPatchSize                        = 32
        maxTessellationControlPerVertexInputComponents  = 128
        maxTessellationControlPerVertexOutputComponents = 128
        maxTessellationControlPerPatchOutputComponents  = 120
        maxTessellationControlTotalOutputComponents     = 4216
        maxTessellationEvaluationInputComponents        = 128
        maxTessellationEvaluationOutputComponents       = 128
        maxGeometryShaderInvocations            = 32
        maxGeometryInputComponents              = 128
        maxGeometryOutputComponents             = 128
        maxGeometryOutputVertices               = 1024
        maxGeometryTotalOutputComponents        = 1024
        maxFragmentInputComponents              = 128
        maxFragmentOutputAttachments            = 8
        maxFragmentDualSrcAttachments           = 1
        maxFragmentCombinedOutputResources      = 16
        maxComputeSharedMemorySize              = 0xc000
        maxComputeWorkGroupCount[0]             = 2147483647
        maxComputeWorkGroupCount[1]             = 65535
        maxComputeWorkGroupCount[2]             = 65535
        maxComputeWorkGroupInvocations          = 1536
        maxComputeWorkGroupSize[0]              = 1536
        maxComputeWorkGroupSize[1]              = 1024
        maxComputeWorkGroupSize[2]              = 64
        subPixelPrecisionBits                   = 8
        subTexelPrecisionBits                   = 8
        mipmapPrecisionBits                     = 8
        maxDrawIndexedIndexValue                = 4294967295
        maxDrawIndirectCount                    = 4294967295
        maxSamplerLodBias                       = 15.000000
        maxSamplerAnisotropy                    = 16.000000
        maxViewports                            = 16
        maxViewportDimensions[0]                = 16384
        maxViewportDimensions[1]                = 16384
        viewportBoundsRange[0]                  = -32768.000000
        viewportBoundsRange[1]                  =  32768.000000
        viewportSubPixelBits                    = 8
        minMemoryMapAlignment                   = 64
        minTexelBufferOffsetAlignment           = 0x100
        minUniformBufferOffsetAlignment         = 0x100
        minStorageBufferOffsetAlignment         = 0x20
        minTexelOffset                          =  -8
        maxTexelOffset                          =   7
        minTexelGatherOffset                    = -32
        maxTexelGatherOffset                    =  31
        minInterpolationOffset                  = -0.500000
        maxInterpolationOffset                  =  0.437500
        subPixelInterpolationOffsetBits         = 4
        maxFramebufferWidth                     = 16384
        maxFramebufferHeight                    = 16384
        maxFramebufferLayers                    = 2048
        framebufferColorSampleCounts            = 15
        framebufferDepthSampleCounts            = 15
        framebufferStencilSampleCounts          = 15
        framebufferNoAttachmentsSampleCounts    = 15
        maxColorAttachments                     = 8
        sampledImageColorSampleCounts           = 15
        sampledImageDepthSampleCounts           = 15
        sampledImageStencilSampleCounts         = 15
        sampledImageIntegerSampleCounts         = 15
        storageImageSampleCounts                = 15
        maxSampleMaskWords                      = 1
        timestampComputeAndGraphics             = 1
        timestampPeriod                         = 1.000000
        maxClipDistances                        = 8
        maxCullDistances                        = 8
        maxCombinedClipAndCullDistances         = 8
        discreteQueuePriorities                 = 2
        pointSizeRange[0]                       = 1.000000
        pointSizeRange[1]                       = 189.875000
        lineWidthRange[0]                       = 0.500000
        lineWidthRange[1]                       = 10.000000
        pointSizeGranularity                    = 0.125000
        lineWidthGranularity                    = 0.125000
        strictLines                             = 1
        standardSampleLocations                 = 1
        optimalBufferCopyOffsetAlignment        = 0x1
        optimalBufferCopyRowPitchAlignment      = 0x1
        nonCoherentAtomSize                     = 0x40
    VkPhysicalDeviceSparseProperties:
    ---------------------------------
        residencyStandard2DBlockShape            = 1
        residencyStandard2DMultisampleBlockShape = 1
        residencyStandard3DBlockShape            = 1
        residencyAlignedMipSize                  = 1
        residencyNonResidentStrict               = 0

VkPhysicalDevicePointClippingProperties:
========================================
    pointClippingBehavior               = 1

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

VkPhysicalDeviceDiscardRectangleProperties:
=========================================
    maxDiscardRectangles               = 8

VkPhysicalDeviceMultiviewProperties:
=========================================
    maxMultiviewViewCount     = 32
    maxMultiviewInstanceIndex = 134217727

VkPhysicalDeviceMaintenance3Properties:
=======================================
    maxPerSetDescriptors    = 4294967295
    maxMemoryAllocationSize = 4292870144

VkPhysicalDeviceIDProperties:
=========================================
    deviceUUID      = e0737cf5-15de-0279-0296-553729ec38ac
    driverUUID      = 46206b84-e096-8e49-0ec8-92a74b236b45
    deviceLUIDValid = false

Device Extensions   count = 44
    VK_EXT_conditional_rendering        : 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_global_priority              : extension revision  2
    VK_EXT_inline_uniform_block         : extension revision  1
    VK_EXT_shader_subgroup_ballot       : extension revision  1
    VK_EXT_shader_subgroup_vote         : extension revision  1
    VK_EXT_vertex_attribute_divisor     : extension revision  3
    VK_KHR_16bit_storage                : extension revision  1
    VK_KHR_8bit_storage                 : extension revision  1
    VK_KHR_bind_memory2                 : extension revision  1
    VK_KHR_create_renderpass2           : extension revision  1
    VK_KHR_dedicated_allocation         : extension revision  3
    VK_KHR_descriptor_update_template   : extension revision  1
    VK_KHR_device_group                 : extension revision  3
    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_maintenance1                 : extension revision  2
    VK_KHR_maintenance2                 : extension revision  1
    VK_KHR_maintenance3                 : extension revision  1
    VK_KHR_multiview                    : 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  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 70
    VK_KHR_variable_pointers            : extension revision  1
    VK_NVX_device_generated_commands    : extension revision  3
    VK_NVX_multiview_per_view_attributes: extension revision  1
    VK_NV_dedicated_allocation          : extension revision  1
    VK_NV_device_diagnostic_checkpoints : extension revision  2
    VK_NV_shader_subgroup_partitioned   : extension revision  1

VkQueueFamilyProperties[0]:
===========================
    queueFlags         = GRAPHICS | COMPUTE | TRANSFER | SPARSE
    queueCount         = 16
    timestampValidBits = 64
    minImageTransferGranularity = (1, 1, 1)

VkQueueFamilyProperties[1]:
===========================
    queueFlags         = TRANSFER
    queueCount         = 1
    timestampValidBits = 64
    minImageTransferGranularity = (1, 1, 1)

VkPhysicalDeviceMemoryProperties:
=================================
    memoryHeapCount       = 2
    memoryHeaps[0] :
        size          = 2147483648 (0x80000000) (2.00 GiB)
        flags:
            VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
    memoryHeaps[1] :
        size          = 9399840768 (0x230463000) (8.75 GiB)
        flags:
            None
    memoryTypeCount       = 11
    memoryTypes[0] :
        heapIndex     = 1
        propertyFlags = 0x0:
    memoryTypes[1] :
        heapIndex     = 1
        propertyFlags = 0x0:
    memoryTypes[2] :
        heapIndex     = 1
        propertyFlags = 0x0:
    memoryTypes[3] :
        heapIndex     = 1
        propertyFlags = 0x0:
    memoryTypes[4] :
        heapIndex     = 1
        propertyFlags = 0x0:
    memoryTypes[5] :
        heapIndex     = 1
        propertyFlags = 0x0:
    memoryTypes[6] :
        heapIndex     = 1
        propertyFlags = 0x0:
    memoryTypes[7] :
        heapIndex     = 0
        propertyFlags = 0x1:
            VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
    memoryTypes[8] :
        heapIndex     = 0
        propertyFlags = 0x1:
            VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
    memoryTypes[9] :
        heapIndex     = 1
        propertyFlags = 0x6:
            VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
            VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
    memoryTypes[10] :
        heapIndex     = 1
        propertyFlags = 0xe:
            VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
            VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
            VK_MEMORY_PROPERTY_HOST_CACHED_BIT

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                             = 1
    wideLines                               = 1
    largePoints                             = 1
    alphaToOne                              = 1
    multiViewport                           = 1
    samplerAnisotropy                       = 1
    textureCompressionETC2                  = 0
    textureCompressionASTC_LDR              = 0
    textureCompressionBC                    = 1
    occlusionQueryPrecise                   = 1
    pipelineStatisticsQuery                 = 1
    vertexPipelineStoresAndAtomics          = 1
    fragmentStoresAndAtomics                = 1
    shaderTessellationAndGeometryPointSize  = 1
    shaderImageGatherExtended               = 1
    shaderStorageImageExtendedFormats       = 1
    shaderStorageImageMultisample           = 1
    shaderStorageImageReadWithoutFormat     = 0
    shaderStorageImageWriteWithoutFormat    = 1
    shaderUniformBufferArrayDynamicIndexing = 1
    shaderSampledImageArrayDynamicIndexing  = 1
    shaderStorageBufferArrayDynamicIndexing = 1
    shaderStorageImageArrayDynamicIndexing  = 1
    shaderClipDistance                      = 1
    shaderCullDistance                      = 1
    shaderFloat64                           = 1
    shaderInt64                             = 1
    shaderInt16                             = 1
    shaderResourceResidency                 = 0
    shaderResourceMinLod                    = 0
    sparseBinding                           = 1
    sparseResidencyBuffer                   = 0
    sparseResidencyImage2D                  = 0
    sparseResidencyImage3D                  = 0
    sparseResidency2Samples                 = 0
    sparseResidency4Samples                 = 0
    sparseResidency8Samples                 = 0
    sparseResidency16Samples                = 0
    sparseResidencyAliased                  = 0
    variableMultisampleRate                 = 1
    inheritedQueries                        = 1

VkPhysicalDevice8BitStorageFeatures:
=====================================
    storageBuffer8BitAccess           = 1
    uniformAndStorageBuffer8BitAccess = 1
    storagePushConstant8              = 1

VkPhysicalDevice16BitStorageFeatures:
=====================================
    storageBuffer16BitAccess           = 1
    uniformAndStorageBuffer16BitAccess = 1
    storagePushConstant16              = 1
    storageInputOutput16               = 0

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

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

VkPhysicalDeviceMultiviewFeatures:
==================================
    multiview                   = 1
    multiviewGeometryShader     = 1
    multiviewTessellationShader = 1

Format Properties:
==================
FORMAT_UNDEFINED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R4G4_UNORM_PACK8:
    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_R4G4B4A4_UNORM_PACK16:
    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_B4G4R4A4_UNORM_PACK16:
    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_R5G6B5_UNORM_PACK16:
    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

FORMAT_B5G6R5_UNORM_PACK16:
    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_R5G5B5A1_UNORM_PACK16:
    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_B5G5R5A1_UNORM_PACK16:
    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_A1R5G5B5_UNORM_PACK16:
    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

FORMAT_R8_UNORM:
    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_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_SNORM:
    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_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:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8_UINT:
    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_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_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_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:
    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_R8G8_UNORM:
    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_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_R8G8_SNORM:
    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_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_R8G8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8G8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8G8_UINT:
    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_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_R8G8_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_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_R8G8_SRGB:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8G8B8_SNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8G8B8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8G8B8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8G8B8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8G8B8_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8G8B8_SRGB:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_B8G8R8_SNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_B8G8R8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_B8G8R8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_B8G8R8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_B8G8R8_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_B8G8R8_SRGB:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8A8_UNORM:
    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_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_R8G8B8A8_SNORM:
    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_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_R8G8B8A8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8G8B8A8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8G8B8A8_UINT:
    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_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_R8G8B8A8_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_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_R8G8B8A8_SRGB:
    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:
        None

FORMAT_B8G8R8A8_UNORM:
    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_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_B8G8R8A8_SNORM:
    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_B8G8R8A8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_B8G8R8A8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_B8G8R8A8_UINT:
    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_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_SRGB:
    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:
        None

FORMAT_A8B8G8R8_UNORM_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_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_A8B8G8R8_SNORM_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_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_A8B8G8R8_USCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_A8B8G8R8_SSCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_A8B8G8R8_UINT_PACK32:
    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_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_A8B8G8R8_SINT_PACK32:
    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_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_A8B8G8R8_SRGB_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_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:
        None

FORMAT_A2R10G10B10_UNORM_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_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_A2R10G10B10_SNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_A2R10G10B10_USCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_A2R10G10B10_SSCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_A2R10G10B10_UINT_PACK32:
    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_A2R10G10B10_SINT_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_A2B10G10R10_UNORM_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_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_A2B10G10R10_SNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_A2B10G10R10_USCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_A2B10G10R10_SSCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_A2B10G10R10_UINT_PACK32:
    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_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_A2B10G10R10_SINT_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16_UNORM:
    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_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_R16_SNORM:
    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_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_R16_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16_UINT:
    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_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_R16_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_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_R16_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_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_R16G16_UNORM:
    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_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_R16G16_SNORM:
    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_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_R16G16_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16_UINT:
    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_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_R16G16_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_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_R16G16_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_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_R16G16B16_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16B16_SNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16B16_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16B16_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16B16_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16B16_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16B16_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16B16A16_UNORM:
    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_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_R16G16B16A16_SNORM:
    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_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_R16G16B16A16_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16B16A16_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16B16A16_UINT:
    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_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_R16G16B16A16_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_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_R16G16B16A16_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_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_R32_UINT:
    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_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_R32_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_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_R32_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_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_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_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32G32_UINT:
    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_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_R32G32_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_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_R32G32_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_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_R32G32B32_UINT:
    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:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

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:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

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:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32G32B32A32_UINT:
    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_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_R32G32B32A32_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_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_R32G32B32A32_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_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_R64_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R64_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R64_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R64G64_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R64G64_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R64G64_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R64G64B64_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R64G64B64_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R64G64B64_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R64G64B64A64_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R64G64B64A64_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R64G64B64A64_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_B10G11R11_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_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_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_D16_UNORM:
    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_DEPTH_STENCIL_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:
        None

FORMAT_X8_D24_UNORM_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_DEPTH_STENCIL_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:
        None

FORMAT_D32_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_DEPTH_STENCIL_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:
        None

FORMAT_S8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_D16_UNORM_S8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_D24_UNORM_S8_UINT:
    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_DEPTH_STENCIL_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:
        None

FORMAT_D32_SFLOAT_S8_UINT:
    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_DEPTH_STENCIL_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:
        None

FORMAT_BC1_RGB_UNORM_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_BC1_RGB_SRGB_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_BC1_RGBA_UNORM_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_BC1_RGBA_SRGB_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_BC2_UNORM_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_BC2_SRGB_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_BC3_UNORM_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_BC3_SRGB_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_BC4_UNORM_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_BC4_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_BC5_UNORM_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_BC5_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_BC6H_UFLOAT_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_BC6H_SFLOAT_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_BC7_UNORM_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_BC7_SRGB_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_ETC2_R8G8B8_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_EAC_R11_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_EAC_R11_SNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_EAC_R11G11_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_EAC_R11G11_SNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_4x4_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_4x4_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_5x4_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_5x4_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_5x5_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_5x5_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_6x5_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_6x5_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_6x6_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_6x6_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x5_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x5_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x6_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x6_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x8_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x8_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x5_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x5_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x6_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x6_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x8_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x8_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x10_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x10_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_12x10_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_12x10_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_12x12_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_12x12_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None
bearoso commented 5 years ago

Rebuilding beetle-psx-libretro with HAVE_VULKAN=0 will get the OpenGL output working, I'm 100% sure.

The question is why Vulkan is failing, and then why it's bringing OpenGL down with it. It's obviously working well enough to run the menu drivers, and nothing is wrong with your vulkaninfo. It does show you've got other vulkan icd drivers installed for a radeon card, which doesn't need to be there. Use pacman -R vulkan-radeon and/or pacman -R lib32-vulkan-radeon to get rid of it. Then use pacman -Syu vulkan-validation-layers lib32-vulkan-validation-layers vulkan-icd-loader lib32-vulkan-icd-loader vulkan-devel to make sure you've pulled in everything necessary.

Jj0YzL5nvJ commented 5 years ago

Perhaps shader cache corruption? It's a very common issue on Windows...

treymerkley commented 5 years ago

@bearoso So I installed everything you said, and tried building the core with GL, Vulkan, and both enabled. While the core with both didn't work, the individual cores did, but the game behaves as if running the software core regardless whether the renderer is set to hardware or software on start, with framerates on 1xGPU around 45fps and 4xGPU 11fps on the BIOS screen. I think the emulator's somehow defaulting to software regardless of the option I set.

EDIT: It was defaulting to software. After rebuilding with GL on and Vulkan off it still produces the marked as null effect.

treymerkley commented 5 years ago

I wanted to further test and see if it's actually Vulkan itself that's broken, so I tried running ParaLLel 64, since it runs exclusively Vulkan. ParaLLel 64 runs perfectly well, so it seems less likely that Vulkan is outright broken.

bearoso commented 5 years ago

Running a debug build with gdb and getting a backtrace would be the next thing to do.

treymerkley commented 5 years ago

No idea why I closed this, I think I accidentally clicked close and comment. @bearoso Can you explain to me how to do this? I set DEBUG to 1 in the makefile for this, and it looks like debug is already on in the RetroArch makefile, but when I build gdb tells me that it's missing debug symbols.

bearoso commented 5 years ago

With retroarch you can type make DEBUG=1 to get the debug build. It's not on by default. Best to use make DEBUG=1 clean beforehand, too, otherwise you might pull in object files that have no debug info.

treymerkley commented 5 years ago

Okay, just debugged, here's the output that I set gdb to write to an external file.

Vulkan:

Starting program: /tmp/RetroArch/retroarch 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
[New Thread 0x7fffe8c77700 (LWP 568)]
[Detaching after fork from child process 569]
[New Thread 0x7fffdbfff700 (LWP 590)]
[New Thread 0x7fffdb1be700 (LWP 612)]
[Detaching after fork from child process 613]
[Thread 0x7fffdbfff700 (LWP 590) exited]
[New Thread 0x7fffe8c77700 (LWP 630)]
[Thread 0x7fffe8c77700 (LWP 568) exited]
[New Thread 0x7fffdbfff700 (LWP 632)]
[Detaching after fork from child process 645]
[New Thread 0x7fffdfc78700 (LWP 665)]
[New Thread 0x7fffddfb6700 (LWP 676)]

Thread 1 "retroarch" received signal SIGSEGV, Segmentation fault.
0x00007fff7d11558f in std::vector<Vulkan::BufferBlock, std::allocator<Vulkan::BufferBlock> >::end (this=0xdb0)
    at /usr/include/c++/8.2.1/bits/stl_vector.h:726
726       { return const_iterator(this->_M_impl._M_finish); }

GL:

Starting program: /tmp/RetroArch/retroarch 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
[New Thread 0x7fffe8c77700 (LWP 1516)]
[Detaching after fork from child process 1517]
[New Thread 0x7fffe514e700 (LWP 1551)]
[New Thread 0x7fffcb1ff700 (LWP 1583)]
[Detaching after fork from child process 1584]
[Thread 0x7fffe514e700 (LWP 1551) exited]
[Thread 0x7fffe8c77700 (LWP 1516) exited]
[New Thread 0x7fffe8c77700 (LWP 1600)]
[New Thread 0x7fffe514e700 (LWP 1601)]
[Detaching after fork from child process 1608]
[New Thread 0x7fffd8ffc700 (LWP 1628)]
[New Thread 0x7fffccbfc700 (LWP 1629)]
[Thread 0x7fffcb1ff700 (LWP 1583) exited]
[Thread 0x7fffccbfc700 (LWP 1629) exited]
[Thread 0x7fffe514e700 (LWP 1601) exited]
[Thread 0x7fffd8ffc700 (LWP 1628) exited]
[Thread 0x7fffe8c77700 (LWP 1600) exited]
[Inferior 1 (process 1502) exited normally]
bearoso commented 5 years ago

You’ve got to type bt in gdb to list the call stack.

treymerkley commented 5 years ago

It looks like I'm supposed to specify a breakpoint to use bt. Where should I place it to list everything I need?

EDIT: Sorry, I misunderstood, I only need that for GL not Vulkan. Here you go:

#0  0x00007fff7d11558f in std::vector<Vulkan::BufferBlock, std::allocator<Vulkan::BufferBlock> >::end (this=0xdb0)
    at /usr/include/c++/8.2.1/bits/stl_vector.h:726
#1  0x00007fff7d10e183 in std::vector<Vulkan::BufferBlock, std::allocator<Vulkan::BufferBlock> >::empty (this=0xdb0)
    at /usr/include/c++/8.2.1/bits/stl_vector.h:895
#2  0x00007fff7d100b0a in Vulkan::Device::sync_buffer_blocks (this=0x0)
    at parallel-psx/vulkan/device.cpp:1266
#3  0x00007fff7d100aaf in Vulkan::Device::flush_frame (this=0x0, 
    type=Vulkan::CommandBuffer::Type::AsyncTransfer)
    at parallel-psx/vulkan/device.cpp:1260
#4  0x00007fff7d10119b in Vulkan::Device::flush_frame_nolock (this=0x0)
    at parallel-psx/vulkan/device.cpp:1356
#5  0x00007fff7d10117a in Vulkan::Device::flush_frame (this=0x0)
    at parallel-psx/vulkan/device.cpp:1351
#6  0x00007fff7d192f6d in rsx_vulkan_prepare_frame ()
    at rsx/rsx_lib_vulkan.cpp:281
#7  0x00007fff7d086ed2 in rsx_intf_prepare_frame () at rsx/rsx_intf.cpp:209
#8  0x00007fff7d07dce6 in retro_run () at libretro.cpp:3538
#9  0x00005555556923d0 in secondary_core_run_use_last_input ()
    at runahead/secondary_core.c:348
#10 0x00005555556919d8 in runahead_run_secondary () at runahead/run_ahead.c:429
#11 0x000055555569176b in run_ahead (runahead_count=5, useSecondary=true)
--Type <RET> for more, q to quit, c to continue without paging--
    at runahead/run_ahead.c:317
#12 0x00005555555dea90 in runloop_iterate (sleep_ms=0x7fffffffdef0)
    at retroarch.c:3554
#13 0x0000555555724d6d in ui_application_qt_run (args=0x0)
    at ui/drivers/qt/ui_qt_application.cpp:158
#14 0x00005555555d6821 in rarch_main (argc=1, argv=0x7fffffffe078, data=0x0)
    at frontend/frontend.c:157
#15 0x0000555555724deb in main (argc=1, argv=0x7fffffffe078)
    at ui/drivers/qt/ui_qt_application.cpp:182
treymerkley commented 5 years ago

This is my first time trying to debug something with gdb, but it looks like Vulkan's trying to prepare a frame, ends up being unable to prepare a frame, and ends up breaking instead, or 0x0 is the frame or monitor ID and simply segfaults to avoid buffer overflow because no space is allocated to it.

bearoso commented 5 years ago

Well there’s your problem. Turn off runahead.

treymerkley commented 5 years ago

I can't believe it was runahead that was breaking everything, three months later. I also can't express how grateful I am to you for helping me diagnose it.

I know the short answer is that you know the codebase better, but how could you tell it was runahead?

bearoso commented 5 years ago

10 0x00005555556919d8 in runahead_run_secondary () at runahead/run_ahead.c:429

It's quite obvious there.

The second instance will always be trouble on hardware cores because it can't create a second HW context and switch between them. If you really want runahead, you can try just using standard runahead without the second instance, and it might work fine because it just uses save states.

treymerkley commented 5 years ago

Yeah, you're not wrong. I'll try that out. It's mostly there because I like texture filtering but my card is only solidly okay, so I figure runahead can help with latency.