Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Raspberry Pi 4B setup log #438

Closed
dskkato opened this issue Nov 30, 2023 · 7 comments
Closed

Raspberry Pi 4B setup log #438

dskkato opened this issue Nov 30, 2023 · 7 comments

Comments

@dskkato
Copy link
Contributor

dskkato commented Nov 30, 2023

This is not issues, but setup log for Raspberry Pi 4B


Tentative Summary


Device info

Hardware : Raspberry Pi 4 Model B Rev 1.5

dskkato@raspberrypi:~ $ cat /sys/firmware/devicetree/base/model 
Raspberry Pi 4 Model B Rev 1.5

OS : Raspberry Pi OS (64 bit)

 dskkato@raspberrypi:~ $ cat /proc/version 
Linux version 6.1.0-rpi4-rpi-v8 ([email protected])
(gcc-12 (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40)
pygfx/wgpu-py#1 SMP PREEMPT Debian 1:6.1.54-1+rpt2 (2023-10-05)

default Python version : 3.11.2

dskkato@raspberrypi:~ $ python --version
Python 3.11.2

Setup wgpu

clone & install

I used my own release artifact : https://github.com/dskkato/wgpu-native/releases/tag/v0.18.1.4 .

git clone https://github.com/pygfx/wgpu-py.git
cd wgpu-py
python -m venv .venv
source .venv/bin/activate
# modify upstream and version info here (omitted)
pip install -e .

Just after the installation of wgpu-py, it says some libraries are missing:

(.venv) dskkato@raspberrypi:~/workspace/wgpu-py $ python examples/cube.py 
Traceback (most recent call last):
  File "/home/dskkato/workspace/wgpu-py/examples/cube.py", line 8, in <module>
    from wgpu.gui.auto import WgpuCanvas, run
  File "/home/dskkato/workspace/wgpu-py/wgpu/gui/auto.py", line 103, in <module>
    module = _auto_load_backend()
             ^^^^^^^^^^^^^^^^^^^^
  File "/home/dskkato/workspace/wgpu-py/wgpu/gui/auto.py", line 92, in _auto_load_backend
    raise ImportError(msg) from None
ImportError: 

  Could not find either glfw or Qt framework.
  Install glfw using e.g. ``pip install -U glfw``,
  or install a qt framework using e.g. ``pip install -U pyside6``.
  You may also need to run the equivalent of ``apt install libglfw3``.

Add dependencies:

pip install numpy glfw

Still, it does not work

(.venv) dskkato@raspberrypi:~/workspace/wgpu-py $ python examples/cube.py 
	EGL context: -robust access
Max vertex shader SSBO == 0 and SSTO != 0. Interpreting as false zero.
Re-initializing Gles context due to Wayland window
	EGL context: -robust access
thread '<unnamed>' panicked at /root/.cargo/git/checkouts/wgpu-53e70f8674b08dd4/2e7fd75/wgpu-hal/src/gles/egl.rs:305:14:
called `Result::unwrap()` on an `Err` value: BadDisplay
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
fatal runtime error: failed to initiate panic, error 556743984
Aborted

GLES backend seems not to work now.

Install Vulkan driver:

sudo apt install mesa-vulkan-drivers 

Now, cube appeared !!

(.venv) dskkato@raspberrypi:~/workspace/wgpu-py $ python examples/cube.py 
	EGL context: -robust access
Max vertex shader SSBO == 0 and SSTO != 0. Interpreting as false zero.
Missing downlevel flags: DownlevelFlags(FULL_DRAW_INDEX_UINT32)
The underlying API or device in use does not support enough features to be a fully compliant implementation of WebGPU. A subset of the features can still be used. If you are running this program on native and not in a browser and wish to limit the features you use to the supported subset, call Adapter::downlevel_properties or Device::downlevel_properties to get a listing of the features the current platform supports.
Re-initializing Gles context due to Wayland window
	EGL context: -robust access

But, obvious tearing was observed frequently. It may be related to that the latest Rraspberry OS uses wayland by default.

vlcsnap-2023-12-01-01h05m56s439

vlcsnap-2023-12-01-01h06m17s563

In X11, Tearing seems to be less frequent but not completely gone. See the following link how to switch wayland and X11.

https://raspberrypi.stackexchange.com/questions/144866/can-i-use-x11-on-the-new-64-bit-os-instead-of-wayland


TBA : Ubuntu version

@almarklein
Copy link
Member

Thanks for the detailed setup log!

I see that it falls back to GL. Not sure if e.g. pygfx works on that backend. A quick Google search suggests that it is possible to install Vulkan on Raspberry Pi. Have you tried that?

@dskkato
Copy link
Contributor Author

dskkato commented Dec 1, 2023

I've tried several combinations of X11/Wayland and OpenGL/Vulkan. With X11, both OpenGL and Vulkan worked well. However, there seem to be various issues with Wayland. Wayland + OpenGL failed to launch the cube, and Wayland + Vulkan launched but had frequent tearing.

Wayland X11
OpenGL
Vulkan ⚠️ *1 ✅ *2
  • *1: Tearing was observed frequently.
  • *2: It appears to be working, but the following warning message appeared. Not sure if this is fatal or not.

Wayland + OpenGL log

	EGL context: -robust access
Max vertex shader SSBO == 0 and SSTO != 0. Interpreting as false zero.
Re-initializing Gles context due to Wayland window
	EGL context: -robust access
thread '' panicked at /root/.cargo/git/checkouts/wgpu-53e70f8674b08dd4/2e7fd75/wgpu-hal/src/gles/egl.rs:305:14:
called `Result::unwrap()` on an `Err` value: BadDisplay
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
fatal runtime error: failed to initiate panic, error 966897392

X11 + Vulkan log

	EGL context: -robust access
Max vertex shader SSBO == 0 and SSTO != 0. Interpreting as false zero.
Missing downlevel flags: DownlevelFlags(FULL_DRAW_INDEX_UINT32)
The underlying API or device in use does not support enough features to be a
fully compliant implementation of WebGPU. A subset of the features can still
be used. If you are running this program on native and not in a browser and
wish to limit the features you use to the supported subset, call
Adapter::downlevel_properties or Device::downlevel_properties to get a listing
of the features the current platform supports.

I checked drivers with wgpu-info, and verified Vuklan drivers were installed.

Default (OpenGL only)
Adapter 0:
	   Backend: Gl
	      Name: "V3D 4.2"
	  VendorID: 5348
	  DeviceID: 0
	      Type: IntegratedGpu
	    Driver: ""
	DriverInfo: ""
	 Compliant: false
	Features:
		                                           DEPTH_CLIP_CONTROL: false
		                                              TIMESTAMP_QUERY: false
		                                      INDIRECT_FIRST_INSTANCE: false
		                                                   SHADER_F16: false
		                                           BGRA8UNORM_STORAGE: false
		                                     RG11B10UFLOAT_RENDERABLE: false
		                                        DEPTH32FLOAT_STENCIL8: false
		                                       TEXTURE_COMPRESSION_BC: false
		                                     TEXTURE_COMPRESSION_ETC2: true
		                                     TEXTURE_COMPRESSION_ASTC: true
		                                    TEXTURE_FORMAT_16BIT_NORM: false
		                                 TEXTURE_COMPRESSION_ASTC_HDR: false
		                     TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES: true
		                                    PIPELINE_STATISTICS_QUERY: false
		                                TIMESTAMP_QUERY_INSIDE_PASSES: false
		                                     MAPPABLE_PRIMARY_BUFFERS: false
		                                        TEXTURE_BINDING_ARRAY: false
		                                         BUFFER_BINDING_ARRAY: false
		                               STORAGE_RESOURCE_BINDING_ARRAY: false
		SAMPLED_TEXTURE_AND_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING: false
		UNIFORM_BUFFER_AND_STORAGE_TEXTURE_ARRAY_NON_UNIFORM_INDEXING: false
		                                PARTIALLY_BOUND_BINDING_ARRAY: false
		                                          MULTI_DRAW_INDIRECT: false
		                                    MULTI_DRAW_INDIRECT_COUNT: false
		                                               PUSH_CONSTANTS: true
		                                   ADDRESS_MODE_CLAMP_TO_ZERO: true
		                                 ADDRESS_MODE_CLAMP_TO_BORDER: true
		                                            POLYGON_MODE_LINE: false
		                                           POLYGON_MODE_POINT: false
		                                   CONSERVATIVE_RASTERIZATION: false
		                                      VERTEX_WRITABLE_STORAGE: true
		                                                CLEAR_TEXTURE: true
		                                     SPIRV_SHADER_PASSTHROUGH: false
		                                                    MULTIVIEW: false
		                                       VERTEX_ATTRIBUTE_64BIT: false
		                                  SHADER_UNUSED_VERTEX_OUTPUT: true
		                                          TEXTURE_FORMAT_NV12: false
		                                                   SHADER_F64: false
		                                                   SHADER_I16: false
		                                       SHADER_PRIMITIVE_INDEX: false
		                                      SHADER_EARLY_DEPTH_TEST: true
		                                         DUAL_SOURCE_BLENDING: false
	Limits:
		                        Max Texture Dimension 1d: 4096
		                        Max Texture Dimension 2d: 4096
		                        Max Texture Dimension 3d: 4096
		                        Max Texture Array Layers: 2048
		                                 Max Bind Groups: 8
		                     Max Bindings Per Bind Group: 65535
		 Max Dynamic Uniform Buffers Per Pipeline Layout: 15
		 Max Dynamic Storage Buffers Per Pipeline Layout: 16
		           Max Sampled Textures Per Shader Stage: 16
		                   Max Samplers Per Shader Stage: 16
		            Max Storage Buffers Per Shader Stage: 16
		           Max Storage Textures Per Shader Stage: 32
		            Max Uniform Buffers Per Shader Stage: 15
		                 Max Uniform Buffer Binding Size: 65536
		                 Max Storage Buffer Binding Size: 134217728
		                                 Max Buffer Size: 2147483647
		                              Max Vertex Buffers: 16
		                           Max Vertex Attributes: 16
		                  Max Vertex Buffer Array Stride: 2048
		                          Max Push Constant Size: 256
		             Min Uniform Buffer Offset Alignment: 256
		             Min Storage Buffer Offset Alignment: 32
		                Max Inter-Stage Shader Component: 64
		              Max Compute Workgroup Storage Size: 32768
		           Max Compute Invocations Per Workgroup: 256
		                    Max Compute Workgroup Size X: 256
		                    Max Compute Workgroup Size Y: 256
		                    Max Compute Workgroup Size Z: 256
		            Max Compute Workgroups Per Dimension: 65535
	Downlevel Properties:
		                       Shader Model: Sm5
		                                                           COMPUTE_SHADERS: true
		                                                 FRAGMENT_WRITABLE_STORAGE: true
		                                                        INDIRECT_EXECUTION: true
		                                                               BASE_VERTEX: false
		                                                   READ_ONLY_DEPTH_STENCIL: false
		                                       NON_POWER_OF_TWO_MIPMAPPED_TEXTURES: true
		                                                       CUBE_ARRAY_TEXTURES: true
		                                                       COMPARISON_SAMPLERS: true
		                                                         INDEPENDENT_BLEND: true
		                                                            VERTEX_STORAGE: true
		                                                     ANISOTROPIC_FILTERING: true
		                                                          FRAGMENT_STORAGE: true
		                                                      MULTISAMPLED_SHADING: false
		                                           DEPTH_TEXTURE_AND_BUFFER_COPIES: false
		                                             WEBGPU_TEXTURE_FORMAT_SUPPORT: false
		                                       BUFFER_BINDINGS_NOT_16_BYTE_ALIGNED: true
		                                                 UNRESTRICTED_INDEX_BUFFER: true
		                                                    FULL_DRAW_INDEX_UINT32: false
		                                                          DEPTH_BIAS_CLAMP: false
		                                                              VIEW_FORMATS: false
		                                      UNRESTRICTED_EXTERNAL_TEXTURE_COPIES: true
		                                                      SURFACE_VIEW_FORMATS: false
		                                                 NONBLOCKING_QUERY_RESOLVE: false
		VERTEX_AND_INSTANCE_INDEX_RESPECTS_RESPECTIVE_FIRST_VALUE_IN_INDIRECT_DRAW: true

	 Texture Format Allowed Usages:
		                      ┌──────────┬──────────┬─────────────────┬─────────────────┬───────────────────┐
		             R8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		             R8Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		              R8Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		              R8Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		             R16Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		             R16Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		            R16Unorm: │          │          │                 │                 │                   │
		            R16Snorm: │          │          │                 │                 │                   │
		            R16Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		            Rg8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		            Rg8Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		             Rg8Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		             Rg8Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		             R32Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		             R32Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            R32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Rg16Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		            Rg16Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		           Rg16Unorm: │          │          │                 │                 │                   │
		           Rg16Snorm: │          │          │                 │                 │                   │
		           Rg16Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		          Rgba8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		      Rgba8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba8Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		           Rgba8Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		           Rgba8Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Bgra8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		      Bgra8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		         Rgb10a2Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		        Rgb10a2Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		        Rg11b10Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		            Rg32Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		            Rg32Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		           Rg32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		          Rgba16Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba16Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		         Rgba16Unorm: │          │          │                 │                 │                   │
		         Rgba16Snorm: │          │          │                 │                 │                   │
		         Rgba16Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba32Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba32Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		         Rgba32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Stencil8: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		        Depth16Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		        Depth32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		Depth32FloatStencil8: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		         Depth24Plus: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		 Depth24PlusStencil8: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		        Rgb9e5Ufloat: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        Bc1RgbaUnorm: │          │          │                 │                 │                   │
		    Bc1RgbaUnormSrgb: │          │          │                 │                 │                   │
		        Bc2RgbaUnorm: │          │          │                 │                 │                   │
		    Bc2RgbaUnormSrgb: │          │          │                 │                 │                   │
		        Bc3RgbaUnorm: │          │          │                 │                 │                   │
		    Bc3RgbaUnormSrgb: │          │          │                 │                 │                   │
		           Bc4RUnorm: │          │          │                 │                 │                   │
		           Bc4RSnorm: │          │          │                 │                 │                   │
		          Bc5RgUnorm: │          │          │                 │                 │                   │
		          Bc5RgSnorm: │          │          │                 │                 │                   │
		       Bc6hRgbUfloat: │          │          │                 │                 │                   │
		        Bc6hRgbFloat: │          │          │                 │                 │                   │
		        Bc7RgbaUnorm: │          │          │                 │                 │                   │
		    Bc7RgbaUnormSrgb: │          │          │                 │                 │                   │
		       Etc2Rgb8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   Etc2Rgb8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		     Etc2Rgb8A1Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		 Etc2Rgb8A1UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		      Etc2Rgba8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		  Etc2Rgba8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         EacR11Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         EacR11Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        EacRg11Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        EacRg11Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		       AstcB4x4Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB4x4UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB4x4Hdr: │          │          │                 │                 │                   │
		       AstcB5x4Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB5x4UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB5x4Hdr: │          │          │                 │                 │                   │
		       AstcB5x5Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB5x5UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB5x5Hdr: │          │          │                 │                 │                   │
		       AstcB6x5Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB6x5UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB6x5Hdr: │          │          │                 │                 │                   │
		       AstcB6x6Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB6x6UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB6x6Hdr: │          │          │                 │                 │                   │
		       AstcB8x5Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB8x5UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB8x5Hdr: │          │          │                 │                 │                   │
		       AstcB8x6Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB8x6UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB8x6Hdr: │          │          │                 │                 │                   │
		       AstcB8x8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB8x8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB8x8Hdr: │          │          │                 │                 │                   │
		      AstcB10x5Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		  AstcB10x5UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        AstcB10x5Hdr: │          │          │                 │                 │                   │
		      AstcB10x6Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		  AstcB10x6UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        AstcB10x6Hdr: │          │          │                 │                 │                   │
		      AstcB10x8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		  AstcB10x8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        AstcB10x8Hdr: │          │          │                 │                 │                   │
		     AstcB10x10Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		 AstcB10x10UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		       AstcB10x10Hdr: │          │          │                 │                 │                   │
		     AstcB12x10Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		 AstcB12x10UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		       AstcB12x10Hdr: │          │          │                 │                 │                   │
		     AstcB12x12Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		 AstcB12x12UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		       AstcB12x12Hdr: │          │          │                 │                 │                   │
		                      └──────────┴──────────┴─────────────────┴─────────────────┴───────────────────┘

	 Texture Format Flags:
		                      ┌────────────┬────────────────┬────────────────┬────────────────┬─────────────────┬─────────────────────┬────────────────────┬───────────┐
		             R8Unorm: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		             R8Snorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		              R8Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		              R8Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		             R16Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		             R16Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		            R16Unorm: │            │                │                │                │                 │                     │                    │           │
		            R16Snorm: │            │                │                │                │                 │                     │                    │           │
		            R16Float: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		            Rg8Unorm: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		            Rg8Snorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		             Rg8Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		             Rg8Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		             R32Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		             R32Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		            R32Float: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		            Rg16Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		            Rg16Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		           Rg16Unorm: │            │                │                │                │                 │                     │                    │           │
		           Rg16Snorm: │            │                │                │                │                 │                     │                    │           │
		           Rg16Float: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		          Rgba8Unorm: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		      Rgba8UnormSrgb: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		          Rgba8Snorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		           Rgba8Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		           Rgba8Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		          Bgra8Unorm: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		      Bgra8UnormSrgb: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		         Rgb10a2Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		        Rgb10a2Unorm: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		        Rg11b10Float: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		            Rg32Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		            Rg32Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		           Rg32Float: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		          Rgba16Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		          Rgba16Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		         Rgba16Unorm: │            │                │                │                │                 │                     │                    │           │
		         Rgba16Snorm: │            │                │                │                │                 │                     │                    │           │
		         Rgba16Float: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		          Rgba32Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		          Rgba32Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		         Rgba32Float: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		            Stencil8: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        Depth16Unorm: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        Depth32Float: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		Depth32FloatStencil8: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         Depth24Plus: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		 Depth24PlusStencil8: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        Rgb9e5Ufloat: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		        Bc1RgbaUnorm: │            │                │                │                │                 │                     │                    │           │
		    Bc1RgbaUnormSrgb: │            │                │                │                │                 │                     │                    │           │
		        Bc2RgbaUnorm: │            │                │                │                │                 │                     │                    │           │
		    Bc2RgbaUnormSrgb: │            │                │                │                │                 │                     │                    │           │
		        Bc3RgbaUnorm: │            │                │                │                │                 │                     │                    │           │
		    Bc3RgbaUnormSrgb: │            │                │                │                │                 │                     │                    │           │
		           Bc4RUnorm: │            │                │                │                │                 │                     │                    │           │
		           Bc4RSnorm: │            │                │                │                │                 │                     │                    │           │
		          Bc5RgUnorm: │            │                │                │                │                 │                     │                    │           │
		          Bc5RgSnorm: │            │                │                │                │                 │                     │                    │           │
		       Bc6hRgbUfloat: │            │                │                │                │                 │                     │                    │           │
		        Bc6hRgbFloat: │            │                │                │                │                 │                     │                    │           │
		        Bc7RgbaUnorm: │            │                │                │                │                 │                     │                    │           │
		    Bc7RgbaUnormSrgb: │            │                │                │                │                 │                     │                    │           │
		       Etc2Rgb8Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   Etc2Rgb8UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		     Etc2Rgb8A1Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		 Etc2Rgb8A1UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		      Etc2Rgba8Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		  Etc2Rgba8UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         EacR11Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         EacR11Snorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		        EacRg11Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		        EacRg11Snorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		       AstcB4x4Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB4x4UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB4x4Hdr: │            │                │                │                │                 │                     │                    │           │
		       AstcB5x4Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB5x4UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB5x4Hdr: │            │                │                │                │                 │                     │                    │           │
		       AstcB5x5Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB5x5UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB5x5Hdr: │            │                │                │                │                 │                     │                    │           │
		       AstcB6x5Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB6x5UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB6x5Hdr: │            │                │                │                │                 │                     │                    │           │
		       AstcB6x6Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB6x6UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB6x6Hdr: │            │                │                │                │                 │                     │                    │           │
		       AstcB8x5Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB8x5UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB8x5Hdr: │            │                │                │                │                 │                     │                    │           │
		       AstcB8x6Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB8x6UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB8x6Hdr: │            │                │                │                │                 │                     │                    │           │
		       AstcB8x8Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB8x8UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB8x8Hdr: │            │                │                │                │                 │                     │                    │           │
		      AstcB10x5Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		  AstcB10x5UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		        AstcB10x5Hdr: │            │                │                │                │                 │                     │                    │           │
		      AstcB10x6Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		  AstcB10x6UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		        AstcB10x6Hdr: │            │                │                │                │                 │                     │                    │           │
		      AstcB10x8Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		  AstcB10x8UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		        AstcB10x8Hdr: │            │                │                │                │                 │                     │                    │           │
		     AstcB10x10Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		 AstcB10x10UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		       AstcB10x10Hdr: │            │                │                │                │                 │                     │                    │           │
		     AstcB12x10Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		 AstcB12x10UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		       AstcB12x10Hdr: │            │                │                │                │                 │                     │                    │           │
		     AstcB12x12Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		 AstcB12x12UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		       AstcB12x12Hdr: │            │                │                │                │                 │                     │                    │           │
		                      └────────────┴────────────────┴────────────────┴────────────────┴─────────────────┴─────────────────────┴────────────────────┴───────────┘

After installation of Vulkan driver

sudo apt install mesa-vulkan-drivers
With Vulkan
Adapter 0:
	   Backend: Vulkan
	      Name: "V3D 4.2.14"
	  VendorID: 5348
	  DeviceID: 3192414163
	      Type: IntegratedGpu
	    Driver: "V3DV Mesa"
	DriverInfo: "Mesa 23.2.1-1~bpo12+rpt2"
	 Compliant: false
	Features:
		                                           DEPTH_CLIP_CONTROL: false
		                                              TIMESTAMP_QUERY: true
		                                      INDIRECT_FIRST_INSTANCE: true
		                                                   SHADER_F16: false
		                                           BGRA8UNORM_STORAGE: false
		                                     RG11B10UFLOAT_RENDERABLE: true
		                                        DEPTH32FLOAT_STENCIL8: false
		                                       TEXTURE_COMPRESSION_BC: false
		                                     TEXTURE_COMPRESSION_ETC2: true
		                                     TEXTURE_COMPRESSION_ASTC: true
		                                    TEXTURE_FORMAT_16BIT_NORM: true
		                                 TEXTURE_COMPRESSION_ASTC_HDR: false
		                     TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES: true
		                                    PIPELINE_STATISTICS_QUERY: false
		                                TIMESTAMP_QUERY_INSIDE_PASSES: true
		                                     MAPPABLE_PRIMARY_BUFFERS: true
		                                        TEXTURE_BINDING_ARRAY: false
		                                         BUFFER_BINDING_ARRAY: false
		                               STORAGE_RESOURCE_BINDING_ARRAY: true
		SAMPLED_TEXTURE_AND_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING: false
		UNIFORM_BUFFER_AND_STORAGE_TEXTURE_ARRAY_NON_UNIFORM_INDEXING: false
		                                PARTIALLY_BOUND_BINDING_ARRAY: false
		                                          MULTI_DRAW_INDIRECT: false
		                                    MULTI_DRAW_INDIRECT_COUNT: false
		                                               PUSH_CONSTANTS: true
		                                   ADDRESS_MODE_CLAMP_TO_ZERO: true
		                                 ADDRESS_MODE_CLAMP_TO_BORDER: true
		                                            POLYGON_MODE_LINE: true
		                                           POLYGON_MODE_POINT: true
		                                   CONSERVATIVE_RASTERIZATION: false
		                                      VERTEX_WRITABLE_STORAGE: true
		                                                CLEAR_TEXTURE: true
		                                     SPIRV_SHADER_PASSTHROUGH: true
		                                                    MULTIVIEW: true
		                                       VERTEX_ATTRIBUTE_64BIT: false
		                                  SHADER_UNUSED_VERTEX_OUTPUT: true
		                                          TEXTURE_FORMAT_NV12: true
		                                                   SHADER_F64: false
		                                                   SHADER_I16: false
		                                       SHADER_PRIMITIVE_INDEX: true
		                                      SHADER_EARLY_DEPTH_TEST: false
		                                         DUAL_SOURCE_BLENDING: false
	Limits:
		                        Max Texture Dimension 1d: 4096
		                        Max Texture Dimension 2d: 4096
		                        Max Texture Dimension 3d: 4096
		                        Max Texture Array Layers: 2048
		                                 Max Bind Groups: 8
		                     Max Bindings Per Bind Group: 1000
		 Max Dynamic Uniform Buffers Per Pipeline Layout: 8
		 Max Dynamic Storage Buffers Per Pipeline Layout: 4
		           Max Sampled Textures Per Shader Stage: 16
		                   Max Samplers Per Shader Stage: 24
		            Max Storage Buffers Per Shader Stage: 8
		           Max Storage Textures Per Shader Stage: 4
		            Max Uniform Buffers Per Shader Stage: 12
		                 Max Uniform Buffer Binding Size: 1073741824
		                 Max Storage Buffer Binding Size: 1073741824
		                                 Max Buffer Size: 2147483647
		                              Max Vertex Buffers: 16
		                           Max Vertex Attributes: 16
		                  Max Vertex Buffer Array Stride: 4294967295
		                          Max Push Constant Size: 128
		             Min Uniform Buffer Offset Alignment: 32
		             Min Storage Buffer Offset Alignment: 32
		                Max Inter-Stage Shader Component: 64
		              Max Compute Workgroup Storage Size: 16384
		           Max Compute Invocations Per Workgroup: 256
		                    Max Compute Workgroup Size X: 256
		                    Max Compute Workgroup Size Y: 256
		                    Max Compute Workgroup Size Z: 256
		            Max Compute Workgroups Per Dimension: 65535
	Downlevel Properties:
		                       Shader Model: Sm5
		                                                           COMPUTE_SHADERS: true
		                                                 FRAGMENT_WRITABLE_STORAGE: true
		                                                        INDIRECT_EXECUTION: true
		                                                               BASE_VERTEX: true
		                                                   READ_ONLY_DEPTH_STENCIL: true
		                                       NON_POWER_OF_TWO_MIPMAPPED_TEXTURES: true
		                                                       CUBE_ARRAY_TEXTURES: true
		                                                       COMPARISON_SAMPLERS: true
		                                                         INDEPENDENT_BLEND: true
		                                                            VERTEX_STORAGE: true
		                                                     ANISOTROPIC_FILTERING: true
		                                                          FRAGMENT_STORAGE: true
		                                                      MULTISAMPLED_SHADING: true
		                                           DEPTH_TEXTURE_AND_BUFFER_COPIES: true
		                                             WEBGPU_TEXTURE_FORMAT_SUPPORT: true
		                                       BUFFER_BINDINGS_NOT_16_BYTE_ALIGNED: true
		                                                 UNRESTRICTED_INDEX_BUFFER: true
		                                                    FULL_DRAW_INDEX_UINT32: false
		                                                          DEPTH_BIAS_CLAMP: true
		                                                              VIEW_FORMATS: true
		                                      UNRESTRICTED_EXTERNAL_TEXTURE_COPIES: true
		                                                      SURFACE_VIEW_FORMATS: true
		                                                 NONBLOCKING_QUERY_RESOLVE: true
		VERTEX_AND_INSTANCE_INDEX_RESPECTS_RESPECTIVE_FIRST_VALUE_IN_INDIRECT_DRAW: true

	 Texture Format Allowed Usages:
		                      ┌──────────┬──────────┬─────────────────┬─────────────────┬───────────────────┐
		             R8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		             R8Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │                   │
		              R8Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		              R8Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		             R16Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		             R16Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            R16Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │                   │
		            R16Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │                   │
		            R16Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Rg8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Rg8Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │                   │
		             Rg8Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		             Rg8Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		             R32Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		             R32Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            R32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Rg16Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Rg16Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		           Rg16Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │                   │
		           Rg16Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │                   │
		           Rg16Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		      Rgba8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba8Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │                   │
		           Rgba8Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		           Rgba8Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Bgra8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		      Bgra8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		         Rgb10a2Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		        Rgb10a2Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		        Rg11b10Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Rg32Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Rg32Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		           Rg32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba16Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba16Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		         Rgba16Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │                   │
		         Rgba16Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │                   │
		         Rgba16Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba32Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba32Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		         Rgba32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Stencil8: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		        Depth16Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		        Depth32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		Depth32FloatStencil8: │          │          │                 │                 │                   │
		         Depth24Plus: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		 Depth24PlusStencil8: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		        Rgb9e5Ufloat: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        Bc1RgbaUnorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		    Bc1RgbaUnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        Bc2RgbaUnorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		    Bc2RgbaUnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        Bc3RgbaUnorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		    Bc3RgbaUnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		           Bc4RUnorm: │          │          │                 │                 │                   │
		           Bc4RSnorm: │          │          │                 │                 │                   │
		          Bc5RgUnorm: │          │          │                 │                 │                   │
		          Bc5RgSnorm: │          │          │                 │                 │                   │
		       Bc6hRgbUfloat: │          │          │                 │                 │                   │
		        Bc6hRgbFloat: │          │          │                 │                 │                   │
		        Bc7RgbaUnorm: │          │          │                 │                 │                   │
		    Bc7RgbaUnormSrgb: │          │          │                 │                 │                   │
		       Etc2Rgb8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   Etc2Rgb8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		     Etc2Rgb8A1Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		 Etc2Rgb8A1UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		      Etc2Rgba8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		  Etc2Rgba8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         EacR11Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         EacR11Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        EacRg11Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        EacRg11Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		       AstcB4x4Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB4x4UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB4x4Hdr: │          │          │                 │                 │                   │
		       AstcB5x4Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB5x4UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB5x4Hdr: │          │          │                 │                 │                   │
		       AstcB5x5Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB5x5UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB5x5Hdr: │          │          │                 │                 │                   │
		       AstcB6x5Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB6x5UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB6x5Hdr: │          │          │                 │                 │                   │
		       AstcB6x6Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB6x6UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB6x6Hdr: │          │          │                 │                 │                   │
		       AstcB8x5Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB8x5UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB8x5Hdr: │          │          │                 │                 │                   │
		       AstcB8x6Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB8x6UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB8x6Hdr: │          │          │                 │                 │                   │
		       AstcB8x8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB8x8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB8x8Hdr: │          │          │                 │                 │                   │
		      AstcB10x5Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		  AstcB10x5UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        AstcB10x5Hdr: │          │          │                 │                 │                   │
		      AstcB10x6Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		  AstcB10x6UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        AstcB10x6Hdr: │          │          │                 │                 │                   │
		      AstcB10x8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		  AstcB10x8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        AstcB10x8Hdr: │          │          │                 │                 │                   │
		     AstcB10x10Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		 AstcB10x10UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		       AstcB10x10Hdr: │          │          │                 │                 │                   │
		     AstcB12x10Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		 AstcB12x10UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		       AstcB12x10Hdr: │          │          │                 │                 │                   │
		     AstcB12x12Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		 AstcB12x12UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		       AstcB12x12Hdr: │          │          │                 │                 │                   │
		                      └──────────┴──────────┴─────────────────┴─────────────────┴───────────────────┘

	 Texture Format Flags:
		                      ┌────────────┬────────────────┬────────────────┬────────────────┬─────────────────┬─────────────────────┬────────────────────┬───────────┐
		             R8Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		             R8Snorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		              R8Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		              R8Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		             R16Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		             R16Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		            R16Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		            R16Snorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		            R16Float: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		            Rg8Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		            Rg8Snorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		             Rg8Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		             Rg8Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		             R32Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		             R32Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		            R32Float: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		            Rg16Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		            Rg16Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		           Rg16Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		           Rg16Snorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		           Rg16Float: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		          Rgba8Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		      Rgba8UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		          Rgba8Snorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		           Rgba8Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		           Rgba8Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		          Bgra8Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		      Bgra8UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		         Rgb10a2Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		        Rgb10a2Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		        Rg11b10Float: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		            Rg32Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		            Rg32Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		           Rg32Float: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		          Rgba16Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		          Rgba16Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		         Rgba16Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		         Rgba16Snorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		         Rgba16Float: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		          Rgba32Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		          Rgba32Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		         Rgba32Float: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		            Stencil8: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		        Depth16Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		        Depth32Float: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		Depth32FloatStencil8: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		         Depth24Plus: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		 Depth24PlusStencil8: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		        Rgb9e5Ufloat: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		        Bc1RgbaUnorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		    Bc1RgbaUnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        Bc2RgbaUnorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		    Bc2RgbaUnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        Bc3RgbaUnorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		    Bc3RgbaUnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		           Bc4RUnorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		           Bc4RSnorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		          Bc5RgUnorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		          Bc5RgSnorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       Bc6hRgbUfloat: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        Bc6hRgbFloat: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        Bc7RgbaUnorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		    Bc7RgbaUnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       Etc2Rgb8Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   Etc2Rgb8UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		     Etc2Rgb8A1Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		 Etc2Rgb8A1UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		      Etc2Rgba8Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		  Etc2Rgba8UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         EacR11Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         EacR11Snorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        EacRg11Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        EacRg11Snorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB4x4Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB4x4UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB4x4Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB5x4Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB5x4UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB5x4Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB5x5Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB5x5UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB5x5Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB6x5Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB6x5UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB6x5Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB6x6Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB6x6UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB6x6Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB8x5Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB8x5UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB8x5Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB8x6Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB8x6UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB8x6Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB8x8Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB8x8UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB8x8Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		      AstcB10x5Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		  AstcB10x5UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        AstcB10x5Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		      AstcB10x6Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		  AstcB10x6UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        AstcB10x6Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		      AstcB10x8Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		  AstcB10x8UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        AstcB10x8Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		     AstcB10x10Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		 AstcB10x10UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB10x10Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		     AstcB12x10Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		 AstcB12x10UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB12x10Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		     AstcB12x12Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		 AstcB12x12UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB12x12Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		                      └────────────┴────────────────┴────────────────┴────────────────┴─────────────────┴─────────────────────┴────────────────────┴───────────┘
Adapter 1:
	   Backend: Vulkan
	      Name: "llvmpipe (LLVM 15.0.6, 128 bits)"
	  VendorID: 65541
	  DeviceID: 0
	      Type: Cpu
	    Driver: "llvmpipe"
	DriverInfo: "Mesa 23.2.1-1~bpo12+rpt2 (LLVM 15.0.6)"
	 Compliant: true
	Features:
		                                           DEPTH_CLIP_CONTROL: true
		                                              TIMESTAMP_QUERY: true
		                                      INDIRECT_FIRST_INSTANCE: true
		                                                   SHADER_F16: true
		                                           BGRA8UNORM_STORAGE: true
		                                     RG11B10UFLOAT_RENDERABLE: true
		                                        DEPTH32FLOAT_STENCIL8: true
		                                       TEXTURE_COMPRESSION_BC: true
		                                     TEXTURE_COMPRESSION_ETC2: false
		                                     TEXTURE_COMPRESSION_ASTC: false
		                                    TEXTURE_FORMAT_16BIT_NORM: true
		                                 TEXTURE_COMPRESSION_ASTC_HDR: false
		                     TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES: true
		                                    PIPELINE_STATISTICS_QUERY: true
		                                TIMESTAMP_QUERY_INSIDE_PASSES: true
		                                     MAPPABLE_PRIMARY_BUFFERS: true
		                                        TEXTURE_BINDING_ARRAY: true
		                                         BUFFER_BINDING_ARRAY: true
		                               STORAGE_RESOURCE_BINDING_ARRAY: true
		SAMPLED_TEXTURE_AND_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING: true
		UNIFORM_BUFFER_AND_STORAGE_TEXTURE_ARRAY_NON_UNIFORM_INDEXING: true
		                                PARTIALLY_BOUND_BINDING_ARRAY: true
		                                          MULTI_DRAW_INDIRECT: true
		                                    MULTI_DRAW_INDIRECT_COUNT: true
		                                               PUSH_CONSTANTS: true
		                                   ADDRESS_MODE_CLAMP_TO_ZERO: true
		                                 ADDRESS_MODE_CLAMP_TO_BORDER: true
		                                            POLYGON_MODE_LINE: true
		                                           POLYGON_MODE_POINT: true
		                                   CONSERVATIVE_RASTERIZATION: false
		                                      VERTEX_WRITABLE_STORAGE: true
		                                                CLEAR_TEXTURE: true
		                                     SPIRV_SHADER_PASSTHROUGH: true
		                                                    MULTIVIEW: true
		                                       VERTEX_ATTRIBUTE_64BIT: false
		                                  SHADER_UNUSED_VERTEX_OUTPUT: true
		                                          TEXTURE_FORMAT_NV12: false
		                                                   SHADER_F64: true
		                                                   SHADER_I16: true
		                                       SHADER_PRIMITIVE_INDEX: true
		                                      SHADER_EARLY_DEPTH_TEST: false
		                                         DUAL_SOURCE_BLENDING: true
	Limits:
		                        Max Texture Dimension 1d: 16384
		                        Max Texture Dimension 2d: 16384
		                        Max Texture Dimension 3d: 4096
		                        Max Texture Array Layers: 2048
		                                 Max Bind Groups: 8
		                     Max Bindings Per Bind Group: 1000
		 Max Dynamic Uniform Buffers Per Pipeline Layout: 1000000
		 Max Dynamic Storage Buffers Per Pipeline Layout: 1000000
		           Max Sampled Textures Per Shader Stage: 1000000
		                   Max Samplers Per Shader Stage: 1000000
		            Max Storage Buffers Per Shader Stage: 1000000
		           Max Storage Textures Per Shader Stage: 1000000
		            Max Uniform Buffers Per Shader Stage: 1000000
		                 Max Uniform Buffer Binding Size: 65536
		                 Max Storage Buffer Binding Size: 134217728
		                                 Max Buffer Size: 2147483647
		                              Max Vertex Buffers: 16
		                           Max Vertex Attributes: 32
		                  Max Vertex Buffer Array Stride: 2048
		                          Max Push Constant Size: 256
		             Min Uniform Buffer Offset Alignment: 32
		             Min Storage Buffer Offset Alignment: 32
		                Max Inter-Stage Shader Component: 128
		              Max Compute Workgroup Storage Size: 32768
		           Max Compute Invocations Per Workgroup: 1024
		                    Max Compute Workgroup Size X: 1024
		                    Max Compute Workgroup Size Y: 1024
		                    Max Compute Workgroup Size Z: 1024
		            Max Compute Workgroups Per Dimension: 65535
	Downlevel Properties:
		                       Shader Model: Sm5
		                                                           COMPUTE_SHADERS: true
		                                                 FRAGMENT_WRITABLE_STORAGE: true
		                                                        INDIRECT_EXECUTION: true
		                                                               BASE_VERTEX: true
		                                                   READ_ONLY_DEPTH_STENCIL: true
		                                       NON_POWER_OF_TWO_MIPMAPPED_TEXTURES: true
		                                                       CUBE_ARRAY_TEXTURES: true
		                                                       COMPARISON_SAMPLERS: true
		                                                         INDEPENDENT_BLEND: true
		                                                            VERTEX_STORAGE: true
		                                                     ANISOTROPIC_FILTERING: true
		                                                          FRAGMENT_STORAGE: true
		                                                      MULTISAMPLED_SHADING: true
		                                           DEPTH_TEXTURE_AND_BUFFER_COPIES: true
		                                             WEBGPU_TEXTURE_FORMAT_SUPPORT: true
		                                       BUFFER_BINDINGS_NOT_16_BYTE_ALIGNED: true
		                                                 UNRESTRICTED_INDEX_BUFFER: true
		                                                    FULL_DRAW_INDEX_UINT32: true
		                                                          DEPTH_BIAS_CLAMP: true
		                                                              VIEW_FORMATS: true
		                                      UNRESTRICTED_EXTERNAL_TEXTURE_COPIES: true
		                                                      SURFACE_VIEW_FORMATS: true
		                                                 NONBLOCKING_QUERY_RESOLVE: true
		VERTEX_AND_INSTANCE_INDEX_RESPECTS_RESPECTIVE_FIRST_VALUE_IN_INDIRECT_DRAW: true

	 Texture Format Allowed Usages:
		                      ┌──────────┬──────────┬─────────────────┬─────────────────┬───────────────────┐
		             R8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		             R8Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		              R8Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		              R8Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		             R16Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		             R16Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            R16Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            R16Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            R16Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Rg8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Rg8Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		             Rg8Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		             Rg8Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		             R32Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		             R32Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            R32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Rg16Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Rg16Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		           Rg16Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		           Rg16Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		           Rg16Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		      Rgba8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		          Rgba8Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		           Rgba8Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		           Rgba8Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Bgra8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		      Bgra8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		         Rgb10a2Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		        Rgb10a2Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		        Rg11b10Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Rg32Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Rg32Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		           Rg32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba16Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba16Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		         Rgba16Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		         Rgba16Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		         Rgba16Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba32Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba32Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		         Rgba32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Stencil8: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		        Depth16Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		        Depth32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		Depth32FloatStencil8: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		         Depth24Plus: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		 Depth24PlusStencil8: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		        Rgb9e5Ufloat: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        Bc1RgbaUnorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		    Bc1RgbaUnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        Bc2RgbaUnorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		    Bc2RgbaUnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        Bc3RgbaUnorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		    Bc3RgbaUnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		           Bc4RUnorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		           Bc4RSnorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		          Bc5RgUnorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		          Bc5RgSnorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		       Bc6hRgbUfloat: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        Bc6hRgbFloat: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        Bc7RgbaUnorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		    Bc7RgbaUnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		       Etc2Rgb8Unorm: │          │          │                 │                 │                   │
		   Etc2Rgb8UnormSrgb: │          │          │                 │                 │                   │
		     Etc2Rgb8A1Unorm: │          │          │                 │                 │                   │
		 Etc2Rgb8A1UnormSrgb: │          │          │                 │                 │                   │
		      Etc2Rgba8Unorm: │          │          │                 │                 │                   │
		  Etc2Rgba8UnormSrgb: │          │          │                 │                 │                   │
		         EacR11Unorm: │          │          │                 │                 │                   │
		         EacR11Snorm: │          │          │                 │                 │                   │
		        EacRg11Unorm: │          │          │                 │                 │                   │
		        EacRg11Snorm: │          │          │                 │                 │                   │
		       AstcB4x4Unorm: │          │          │                 │                 │                   │
		   AstcB4x4UnormSrgb: │          │          │                 │                 │                   │
		         AstcB4x4Hdr: │          │          │                 │                 │                   │
		       AstcB5x4Unorm: │          │          │                 │                 │                   │
		   AstcB5x4UnormSrgb: │          │          │                 │                 │                   │
		         AstcB5x4Hdr: │          │          │                 │                 │                   │
		       AstcB5x5Unorm: │          │          │                 │                 │                   │
		   AstcB5x5UnormSrgb: │          │          │                 │                 │                   │
		         AstcB5x5Hdr: │          │          │                 │                 │                   │
		       AstcB6x5Unorm: │          │          │                 │                 │                   │
		   AstcB6x5UnormSrgb: │          │          │                 │                 │                   │
		         AstcB6x5Hdr: │          │          │                 │                 │                   │
		       AstcB6x6Unorm: │          │          │                 │                 │                   │
		   AstcB6x6UnormSrgb: │          │          │                 │                 │                   │
		         AstcB6x6Hdr: │          │          │                 │                 │                   │
		       AstcB8x5Unorm: │          │          │                 │                 │                   │
		   AstcB8x5UnormSrgb: │          │          │                 │                 │                   │
		         AstcB8x5Hdr: │          │          │                 │                 │                   │
		       AstcB8x6Unorm: │          │          │                 │                 │                   │
		   AstcB8x6UnormSrgb: │          │          │                 │                 │                   │
		         AstcB8x6Hdr: │          │          │                 │                 │                   │
		       AstcB8x8Unorm: │          │          │                 │                 │                   │
		   AstcB8x8UnormSrgb: │          │          │                 │                 │                   │
		         AstcB8x8Hdr: │          │          │                 │                 │                   │
		      AstcB10x5Unorm: │          │          │                 │                 │                   │
		  AstcB10x5UnormSrgb: │          │          │                 │                 │                   │
		        AstcB10x5Hdr: │          │          │                 │                 │                   │
		      AstcB10x6Unorm: │          │          │                 │                 │                   │
		  AstcB10x6UnormSrgb: │          │          │                 │                 │                   │
		        AstcB10x6Hdr: │          │          │                 │                 │                   │
		      AstcB10x8Unorm: │          │          │                 │                 │                   │
		  AstcB10x8UnormSrgb: │          │          │                 │                 │                   │
		        AstcB10x8Hdr: │          │          │                 │                 │                   │
		     AstcB10x10Unorm: │          │          │                 │                 │                   │
		 AstcB10x10UnormSrgb: │          │          │                 │                 │                   │
		       AstcB10x10Hdr: │          │          │                 │                 │                   │
		     AstcB12x10Unorm: │          │          │                 │                 │                   │
		 AstcB12x10UnormSrgb: │          │          │                 │                 │                   │
		       AstcB12x10Hdr: │          │          │                 │                 │                   │
		     AstcB12x12Unorm: │          │          │                 │                 │                   │
		 AstcB12x12UnormSrgb: │          │          │                 │                 │                   │
		       AstcB12x12Hdr: │          │          │                 │                 │                   │
		                      └──────────┴──────────┴─────────────────┴─────────────────┴───────────────────┘

	 Texture Format Flags:
		                      ┌────────────┬────────────────┬────────────────┬────────────────┬─────────────────┬─────────────────────┬────────────────────┬───────────┐
		             R8Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		             R8Snorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		              R8Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		              R8Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		             R16Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		             R16Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		            R16Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		            R16Snorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		            R16Float: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		            Rg8Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		            Rg8Snorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		             Rg8Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		             Rg8Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		             R32Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		             R32Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		            R32Float: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		            Rg16Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		            Rg16Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		           Rg16Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		           Rg16Snorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		           Rg16Float: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		          Rgba8Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		      Rgba8UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		          Rgba8Snorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		           Rgba8Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		           Rgba8Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		          Bgra8Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		      Bgra8UnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		         Rgb10a2Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		        Rgb10a2Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		        Rg11b10Float: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		            Rg32Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		            Rg32Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		           Rg32Float: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		          Rgba16Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		          Rgba16Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		         Rgba16Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		         Rgba16Snorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		         Rgba16Float: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		          Rgba32Uint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		          Rgba32Sint: │            │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		         Rgba32Float: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		            Stencil8: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		        Depth16Unorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		        Depth32Float: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		Depth32FloatStencil8: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		         Depth24Plus: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		 Depth24PlusStencil8: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		        Rgb9e5Ufloat: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		        Bc1RgbaUnorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		    Bc1RgbaUnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        Bc2RgbaUnorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		    Bc2RgbaUnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        Bc3RgbaUnorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		    Bc3RgbaUnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		           Bc4RUnorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		           Bc4RSnorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		          Bc5RgUnorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		          Bc5RgSnorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       Bc6hRgbUfloat: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        Bc6hRgbFloat: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        Bc7RgbaUnorm: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		    Bc7RgbaUnormSrgb: │ FILTERABLE │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       Etc2Rgb8Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   Etc2Rgb8UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		     Etc2Rgb8A1Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		 Etc2Rgb8A1UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		      Etc2Rgba8Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		  Etc2Rgba8UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         EacR11Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         EacR11Snorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        EacRg11Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        EacRg11Snorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB4x4Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB4x4UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB4x4Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB5x4Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB5x4UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB5x4Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB5x5Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB5x5UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB5x5Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB6x5Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB6x5UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB6x5Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB6x6Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB6x6UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB6x6Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB8x5Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB8x5UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB8x5Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB8x6Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB8x6UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB8x6Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB8x8Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		   AstcB8x8UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         AstcB8x8Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		      AstcB10x5Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		  AstcB10x5UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        AstcB10x5Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		      AstcB10x6Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		  AstcB10x6UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        AstcB10x6Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		      AstcB10x8Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		  AstcB10x8UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        AstcB10x8Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		     AstcB10x10Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		 AstcB10x10UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB10x10Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		     AstcB12x10Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		 AstcB12x10UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB12x10Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		     AstcB12x12Unorm: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		 AstcB12x12UnormSrgb: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		       AstcB12x12Hdr: │            │                │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		                      └────────────┴────────────────┴────────────────┴────────────────┴─────────────────┴─────────────────────┴────────────────────┴───────────┘
Adapter 2:
	   Backend: Gl
	      Name: "V3D 4.2"
	  VendorID: 5348
	  DeviceID: 0
	      Type: IntegratedGpu
	    Driver: ""
	DriverInfo: ""
	 Compliant: false
	Features:
		                                           DEPTH_CLIP_CONTROL: false
		                                              TIMESTAMP_QUERY: false
		                                      INDIRECT_FIRST_INSTANCE: false
		                                                   SHADER_F16: false
		                                           BGRA8UNORM_STORAGE: false
		                                     RG11B10UFLOAT_RENDERABLE: false
		                                        DEPTH32FLOAT_STENCIL8: false
		                                       TEXTURE_COMPRESSION_BC: false
		                                     TEXTURE_COMPRESSION_ETC2: true
		                                     TEXTURE_COMPRESSION_ASTC: true
		                                    TEXTURE_FORMAT_16BIT_NORM: false
		                                 TEXTURE_COMPRESSION_ASTC_HDR: false
		                     TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES: true
		                                    PIPELINE_STATISTICS_QUERY: false
		                                TIMESTAMP_QUERY_INSIDE_PASSES: false
		                                     MAPPABLE_PRIMARY_BUFFERS: false
		                                        TEXTURE_BINDING_ARRAY: false
		                                         BUFFER_BINDING_ARRAY: false
		                               STORAGE_RESOURCE_BINDING_ARRAY: false
		SAMPLED_TEXTURE_AND_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING: false
		UNIFORM_BUFFER_AND_STORAGE_TEXTURE_ARRAY_NON_UNIFORM_INDEXING: false
		                                PARTIALLY_BOUND_BINDING_ARRAY: false
		                                          MULTI_DRAW_INDIRECT: false
		                                    MULTI_DRAW_INDIRECT_COUNT: false
		                                               PUSH_CONSTANTS: true
		                                   ADDRESS_MODE_CLAMP_TO_ZERO: true
		                                 ADDRESS_MODE_CLAMP_TO_BORDER: true
		                                            POLYGON_MODE_LINE: false
		                                           POLYGON_MODE_POINT: false
		                                   CONSERVATIVE_RASTERIZATION: false
		                                      VERTEX_WRITABLE_STORAGE: true
		                                                CLEAR_TEXTURE: true
		                                     SPIRV_SHADER_PASSTHROUGH: false
		                                                    MULTIVIEW: false
		                                       VERTEX_ATTRIBUTE_64BIT: false
		                                  SHADER_UNUSED_VERTEX_OUTPUT: true
		                                          TEXTURE_FORMAT_NV12: false
		                                                   SHADER_F64: false
		                                                   SHADER_I16: false
		                                       SHADER_PRIMITIVE_INDEX: false
		                                      SHADER_EARLY_DEPTH_TEST: true
		                                         DUAL_SOURCE_BLENDING: false
	Limits:
		                        Max Texture Dimension 1d: 4096
		                        Max Texture Dimension 2d: 4096
		                        Max Texture Dimension 3d: 4096
		                        Max Texture Array Layers: 2048
		                                 Max Bind Groups: 8
		                     Max Bindings Per Bind Group: 65535
		 Max Dynamic Uniform Buffers Per Pipeline Layout: 15
		 Max Dynamic Storage Buffers Per Pipeline Layout: 16
		           Max Sampled Textures Per Shader Stage: 16
		                   Max Samplers Per Shader Stage: 16
		            Max Storage Buffers Per Shader Stage: 16
		           Max Storage Textures Per Shader Stage: 32
		            Max Uniform Buffers Per Shader Stage: 15
		                 Max Uniform Buffer Binding Size: 65536
		                 Max Storage Buffer Binding Size: 134217728
		                                 Max Buffer Size: 2147483647
		                              Max Vertex Buffers: 16
		                           Max Vertex Attributes: 16
		                  Max Vertex Buffer Array Stride: 2048
		                          Max Push Constant Size: 256
		             Min Uniform Buffer Offset Alignment: 256
		             Min Storage Buffer Offset Alignment: 32
		                Max Inter-Stage Shader Component: 64
		              Max Compute Workgroup Storage Size: 32768
		           Max Compute Invocations Per Workgroup: 256
		                    Max Compute Workgroup Size X: 256
		                    Max Compute Workgroup Size Y: 256
		                    Max Compute Workgroup Size Z: 256
		            Max Compute Workgroups Per Dimension: 65535
	Downlevel Properties:
		                       Shader Model: Sm5
		                                                           COMPUTE_SHADERS: true
		                                                 FRAGMENT_WRITABLE_STORAGE: true
		                                                        INDIRECT_EXECUTION: true
		                                                               BASE_VERTEX: false
		                                                   READ_ONLY_DEPTH_STENCIL: false
		                                       NON_POWER_OF_TWO_MIPMAPPED_TEXTURES: true
		                                                       CUBE_ARRAY_TEXTURES: true
		                                                       COMPARISON_SAMPLERS: true
		                                                         INDEPENDENT_BLEND: true
		                                                            VERTEX_STORAGE: true
		                                                     ANISOTROPIC_FILTERING: true
		                                                          FRAGMENT_STORAGE: true
		                                                      MULTISAMPLED_SHADING: false
		                                           DEPTH_TEXTURE_AND_BUFFER_COPIES: false
		                                             WEBGPU_TEXTURE_FORMAT_SUPPORT: false
		                                       BUFFER_BINDINGS_NOT_16_BYTE_ALIGNED: true
		                                                 UNRESTRICTED_INDEX_BUFFER: true
		                                                    FULL_DRAW_INDEX_UINT32: false
		                                                          DEPTH_BIAS_CLAMP: false
		                                                              VIEW_FORMATS: false
		                                      UNRESTRICTED_EXTERNAL_TEXTURE_COPIES: true
		                                                      SURFACE_VIEW_FORMATS: false
		                                                 NONBLOCKING_QUERY_RESOLVE: false
		VERTEX_AND_INSTANCE_INDEX_RESPECTS_RESPECTIVE_FIRST_VALUE_IN_INDIRECT_DRAW: true

	 Texture Format Allowed Usages:
		                      ┌──────────┬──────────┬─────────────────┬─────────────────┬───────────────────┐
		             R8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		             R8Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		              R8Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		              R8Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		             R16Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		             R16Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		            R16Unorm: │          │          │                 │                 │                   │
		            R16Snorm: │          │          │                 │                 │                   │
		            R16Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		            Rg8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		            Rg8Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		             Rg8Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		             Rg8Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		             R32Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		             R32Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            R32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Rg16Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		            Rg16Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		           Rg16Unorm: │          │          │                 │                 │                   │
		           Rg16Snorm: │          │          │                 │                 │                   │
		           Rg16Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		          Rgba8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		      Rgba8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba8Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		           Rgba8Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		           Rgba8Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Bgra8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		      Bgra8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		         Rgb10a2Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		        Rgb10a2Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		        Rg11b10Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		            Rg32Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		            Rg32Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		           Rg32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		          Rgba16Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba16Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		         Rgba16Unorm: │          │          │                 │                 │                   │
		         Rgba16Snorm: │          │          │                 │                 │                   │
		         Rgba16Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba32Uint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		          Rgba32Sint: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		         Rgba32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │ STORAGE_BINDING │ RENDER_ATTACHMENT │
		            Stencil8: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		        Depth16Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		        Depth32Float: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		Depth32FloatStencil8: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		         Depth24Plus: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		 Depth24PlusStencil8: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │ RENDER_ATTACHMENT │
		        Rgb9e5Ufloat: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        Bc1RgbaUnorm: │          │          │                 │                 │                   │
		    Bc1RgbaUnormSrgb: │          │          │                 │                 │                   │
		        Bc2RgbaUnorm: │          │          │                 │                 │                   │
		    Bc2RgbaUnormSrgb: │          │          │                 │                 │                   │
		        Bc3RgbaUnorm: │          │          │                 │                 │                   │
		    Bc3RgbaUnormSrgb: │          │          │                 │                 │                   │
		           Bc4RUnorm: │          │          │                 │                 │                   │
		           Bc4RSnorm: │          │          │                 │                 │                   │
		          Bc5RgUnorm: │          │          │                 │                 │                   │
		          Bc5RgSnorm: │          │          │                 │                 │                   │
		       Bc6hRgbUfloat: │          │          │                 │                 │                   │
		        Bc6hRgbFloat: │          │          │                 │                 │                   │
		        Bc7RgbaUnorm: │          │          │                 │                 │                   │
		    Bc7RgbaUnormSrgb: │          │          │                 │                 │                   │
		       Etc2Rgb8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   Etc2Rgb8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		     Etc2Rgb8A1Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		 Etc2Rgb8A1UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		      Etc2Rgba8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		  Etc2Rgba8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         EacR11Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         EacR11Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        EacRg11Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        EacRg11Snorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		       AstcB4x4Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB4x4UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB4x4Hdr: │          │          │                 │                 │                   │
		       AstcB5x4Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB5x4UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB5x4Hdr: │          │          │                 │                 │                   │
		       AstcB5x5Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB5x5UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB5x5Hdr: │          │          │                 │                 │                   │
		       AstcB6x5Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB6x5UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB6x5Hdr: │          │          │                 │                 │                   │
		       AstcB6x6Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB6x6UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB6x6Hdr: │          │          │                 │                 │                   │
		       AstcB8x5Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB8x5UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB8x5Hdr: │          │          │                 │                 │                   │
		       AstcB8x6Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB8x6UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB8x6Hdr: │          │          │                 │                 │                   │
		       AstcB8x8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		   AstcB8x8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		         AstcB8x8Hdr: │          │          │                 │                 │                   │
		      AstcB10x5Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		  AstcB10x5UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        AstcB10x5Hdr: │          │          │                 │                 │                   │
		      AstcB10x6Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		  AstcB10x6UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        AstcB10x6Hdr: │          │          │                 │                 │                   │
		      AstcB10x8Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		  AstcB10x8UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		        AstcB10x8Hdr: │          │          │                 │                 │                   │
		     AstcB10x10Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		 AstcB10x10UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		       AstcB10x10Hdr: │          │          │                 │                 │                   │
		     AstcB12x10Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		 AstcB12x10UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		       AstcB12x10Hdr: │          │          │                 │                 │                   │
		     AstcB12x12Unorm: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		 AstcB12x12UnormSrgb: │ COPY_SRC │ COPY_DST │ TEXTURE_BINDING │                 │                   │
		       AstcB12x12Hdr: │          │          │                 │                 │                   │
		                      └──────────┴──────────┴─────────────────┴─────────────────┴───────────────────┘

	 Texture Format Flags:
		                      ┌────────────┬────────────────┬────────────────┬────────────────┬─────────────────┬─────────────────────┬────────────────────┬───────────┐
		             R8Unorm: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		             R8Snorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		              R8Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		              R8Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		             R16Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		             R16Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		            R16Unorm: │            │                │                │                │                 │                     │                    │           │
		            R16Snorm: │            │                │                │                │                 │                     │                    │           │
		            R16Float: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		            Rg8Unorm: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		            Rg8Snorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		             Rg8Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		             Rg8Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		             R32Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		             R32Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		            R32Float: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		            Rg16Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		            Rg16Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		           Rg16Unorm: │            │                │                │                │                 │                     │                    │           │
		           Rg16Snorm: │            │                │                │                │                 │                     │                    │           │
		           Rg16Float: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		          Rgba8Unorm: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		      Rgba8UnormSrgb: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		          Rgba8Snorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		           Rgba8Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		           Rgba8Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		          Bgra8Unorm: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		      Bgra8UnormSrgb: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		         Rgb10a2Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		        Rgb10a2Unorm: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		        Rg11b10Float: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		            Rg32Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		            Rg32Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │           │
		           Rg32Float: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │                    │ BLENDABLE │
		          Rgba16Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		          Rgba16Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		         Rgba16Unorm: │            │                │                │                │                 │                     │                    │           │
		         Rgba16Snorm: │            │                │                │                │                 │                     │                    │           │
		         Rgba16Float: │ FILTERABLE │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		          Rgba32Uint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		          Rgba32Sint: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │           │
		         Rgba32Float: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │ MULTISAMPLE_RESOLVE │ STORAGE_READ_WRITE │ BLENDABLE │
		            Stencil8: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        Depth16Unorm: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        Depth32Float: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		Depth32FloatStencil8: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		         Depth24Plus: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		 Depth24PlusStencil8: │            │ MULTISAMPLE_X2 │ MULTISAMPLE_X4 │                │                 │                     │                    │           │
		        Rgb9e5Ufloat: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		        Bc1RgbaUnorm: │            │                │                │                │                 │                     │                    │           │
		    Bc1RgbaUnormSrgb: │            │                │                │                │                 │                     │                    │           │
		        Bc2RgbaUnorm: │            │                │                │                │                 │                     │                    │           │
		    Bc2RgbaUnormSrgb: │            │                │                │                │                 │                     │                    │           │
		        Bc3RgbaUnorm: │            │                │                │                │                 │                     │                    │           │
		    Bc3RgbaUnormSrgb: │            │                │                │                │                 │                     │                    │           │
		           Bc4RUnorm: │            │                │                │                │                 │                     │                    │           │
		           Bc4RSnorm: │            │                │                │                │                 │                     │                    │           │
		          Bc5RgUnorm: │            │                │                │                │                 │                     │                    │           │
		          Bc5RgSnorm: │            │                │                │                │                 │                     │                    │           │
		       Bc6hRgbUfloat: │            │                │                │                │                 │                     │                    │           │
		        Bc6hRgbFloat: │            │                │                │                │                 │                     │                    │           │
		        Bc7RgbaUnorm: │            │                │                │                │                 │                     │                    │           │
		    Bc7RgbaUnormSrgb: │            │                │                │                │                 │                     │                    │           │
		       Etc2Rgb8Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   Etc2Rgb8UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		     Etc2Rgb8A1Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		 Etc2Rgb8A1UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		      Etc2Rgba8Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		  Etc2Rgba8UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         EacR11Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         EacR11Snorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		        EacRg11Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		        EacRg11Snorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		       AstcB4x4Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB4x4UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB4x4Hdr: │            │                │                │                │                 │                     │                    │           │
		       AstcB5x4Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB5x4UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB5x4Hdr: │            │                │                │                │                 │                     │                    │           │
		       AstcB5x5Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB5x5UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB5x5Hdr: │            │                │                │                │                 │                     │                    │           │
		       AstcB6x5Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB6x5UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB6x5Hdr: │            │                │                │                │                 │                     │                    │           │
		       AstcB6x6Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB6x6UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB6x6Hdr: │            │                │                │                │                 │                     │                    │           │
		       AstcB8x5Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB8x5UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB8x5Hdr: │            │                │                │                │                 │                     │                    │           │
		       AstcB8x6Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB8x6UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB8x6Hdr: │            │                │                │                │                 │                     │                    │           │
		       AstcB8x8Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		   AstcB8x8UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		         AstcB8x8Hdr: │            │                │                │                │                 │                     │                    │           │
		      AstcB10x5Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		  AstcB10x5UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		        AstcB10x5Hdr: │            │                │                │                │                 │                     │                    │           │
		      AstcB10x6Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		  AstcB10x6UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		        AstcB10x6Hdr: │            │                │                │                │                 │                     │                    │           │
		      AstcB10x8Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		  AstcB10x8UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		        AstcB10x8Hdr: │            │                │                │                │                 │                     │                    │           │
		     AstcB10x10Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		 AstcB10x10UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		       AstcB10x10Hdr: │            │                │                │                │                 │                     │                    │           │
		     AstcB12x10Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		 AstcB12x10UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		       AstcB12x10Hdr: │            │                │                │                │                 │                     │                    │           │
		     AstcB12x12Unorm: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		 AstcB12x12UnormSrgb: │ FILTERABLE │                │                │                │                 │                     │                    │           │
		       AstcB12x12Hdr: │            │                │                │                │                 │                     │                    │           │
		                      └────────────┴────────────────┴────────────────┴────────────────┴─────────────────┴─────────────────────┴────────────────────┴───────────┘

@dskkato
Copy link
Contributor Author

dskkato commented Dec 1, 2023

Here is current test results on X11/OpenGL backend environment.

Test results
============================= test session starts ==============================
platform linux -- Python 3.11.2, pytest-7.4.3, pluggy-1.3.0 -- /home/dskkato/workspace/wgpu-py/.venv/bin/python
cachedir: .pytest_cache
rootdir: /home/dskkato/workspace/wgpu-py
collecting ... collected 120 items

tests/test_api.py::test_basic_api PASSED                                 [  0%]
tests/test_api.py::test_api_subpackages_are_there PASSED                 [  1%]
tests/test_api.py::test_logging PASSED                                   [  2%]
tests/test_api.py::test_enums_and_flags_and_structs PASSED               [  3%]
tests/test_api.py::test_base_wgpu_api PASSED                             [  4%]
tests/test_api.py::test_backend_is_selected_automatically PASSED         [  5%]
tests/test_api.py::test_that_we_know_how_our_api_differs PASSED          [  5%]
tests/test_api.py::test_that_all_docstrings_are_there PASSED             [  6%]
tests/test_api.py::test_do_not_import_utils_submodules PASSED            [  7%]
tests/test_api.py::test_register_backend_fails PASSED                    [  8%]
tests/test_diagnostics.py::test_diagnostics_meta PASSED                  [  9%]
tests/test_diagnostics.py::test_diagnostics_main PASSED                  [ 10%]
tests/test_diagnostics.py::test_dict_to_text_simple PASSED               [ 10%]
tests/test_diagnostics.py::test_dict_to_text_table PASSED                [ 11%]
tests/test_diagnostics.py::test_dict_to_text_justification PASSED        [ 12%]
tests/test_diagnostics.py::test_dict_to_text_subdicts PASSED             [ 13%]
tests/test_diagnostics.py::test_dict_to_text_mix PASSED                  [ 14%]
tests/test_diagnostics.py::test_object_tracker PASSED                    [ 15%]
tests/test_diagnostics.py::test_int_repr PASSED                          [ 15%]
tests/test_diagnostics.py::test_diagnostics_with_backends PASSED         [ 16%]
tests/test_diagnostics.py::test_texture_format_map_is_complete PASSED    [ 17%]
tests/test_gui_auto_offscreen.py::test_canvas_class PASSED               [ 18%]
tests/test_gui_auto_offscreen.py::test_event_loop PASSED                 [ 19%]
tests/test_gui_auto_offscreen.py::test_offscreen_canvas_del PASSED       [ 20%]
tests/test_gui_base.py::test_base_canvas_context PASSED                  [ 20%]
tests/test_gui_base.py::test_canvas_logging PASSED                       [ 21%]
tests/test_gui_base.py::test_offscreen_canvas PASSED                     [ 22%]
tests/test_gui_base.py::test_autogui_mixin PASSED                        [ 23%]
tests/test_gui_base.py::test_weakbind PASSED                             [ 24%]
tests/test_gui_glfw.py::test_is_autogui PASSED                           [ 25%]
tests/test_gui_glfw.py::test_glfw_canvas_basics PASSED                   [ 25%]
tests/test_gui_glfw.py::test_glfw_canvas_del PASSED                      [ 26%]
tests/test_gui_glfw.py::test_glfw_canvas_render FAILED                   [ 27%]
tests/test_gui_glfw.py::test_glfw_canvas_render_custom_canvas PASSED     [ 28%]
tests/test_util_compute.py::test_compute_0_1_ctype PASSED                [ 29%]
tests/test_util_compute.py::test_compute_0_1_tuple PASSED                [ 30%]
tests/test_util_compute.py::test_compute_0_1_str PASSED                  [ 30%]
tests/test_util_compute.py::test_compute_0_1_int PASSED                  [ 31%]
tests/test_util_compute.py::test_compute_0_1_spirv PASSED                [ 32%]
tests/test_util_compute.py::test_compute_1_3 PASSED                      [ 33%]
tests/test_util_compute.py::test_compute_in_is_out PASSED                [ 34%]
tests/test_util_compute.py::test_compute_indirect PASSED                 [ 35%]
tests/test_util_compute.py::test_compute_default_layout1 PASSED          [ 35%]
tests/test_util_compute.py::test_compute_default_layout2 PASSED          [ 36%]
tests/test_util_compute.py::test_compute_fails PASSED                    [ 37%]
tests/test_util_core.py::test_error_message_hash PASSED                  [ 38%]
tests/test_util_core.py::test_str_flag_to_int PASSED                     [ 39%]
tests/test_util_shadertoy.py::test_shadertoy_wgsl PASSED                 [ 40%]
tests/test_util_shadertoy.py::test_shadertoy_glsl PASSED                 [ 40%]
tests/test_util_shadertoy.py::test_shadertoy_offscreen PASSED            [ 41%]
tests/test_util_shadertoy.py::test_shadertoy_snapshot PASSED             [ 42%]
tests/test_wgpu_native_basics.py::test_get_wgpu_version PASSED           [ 43%]
tests/test_wgpu_native_basics.py::test_override_wgpu_lib_path PASSED     [ 44%]
tests/test_wgpu_native_basics.py::test_tuple_from_tuple_or_dict PASSED   [ 45%]
tests/test_wgpu_native_basics.py::test_logging PASSED                    [ 45%]
tests/test_wgpu_native_basics.py::test_wgpu_native_tracer PASSED         [ 46%]
tests/test_wgpu_native_basics.py::test_wgpu_native_enumerate_adapters PASSED [ 47%]
tests/test_wgpu_native_basics.py::test_shader_module_creation_spirv PASSED [ 48%]
tests/test_wgpu_native_basics.py::test_adapter_destroy PASSED            [ 49%]
tests/test_wgpu_native_basics.py::test_get_memoryview_and_address PASSED [ 50%]
tests/test_wgpu_native_buffer.py::test_buffer_init1 PASSED               [ 50%]
tests/test_wgpu_native_buffer.py::test_buffer_init2 PASSED               [ 51%]
tests/test_wgpu_native_buffer.py::test_buffer_init3 PASSED               [ 52%]
tests/test_wgpu_native_buffer.py::test_consequitive_writes1 PASSED       [ 53%]
tests/test_wgpu_native_buffer.py::test_consequitive_writes2 PASSED       [ 54%]
tests/test_wgpu_native_buffer.py::test_consequitive_reads PASSED         [ 55%]
tests/test_wgpu_native_buffer.py::test_buffer_mapping_fails PASSED       [ 55%]
tests/test_wgpu_native_buffer.py::test_buffer_read_no_copy PASSED        [ 56%]
tests/test_wgpu_native_buffer.py::test_clear_buffer PASSED               [ 57%]
tests/test_wgpu_native_buffer.py::test_write_buffer1 PASSED              [ 58%]
tests/test_wgpu_native_buffer.py::test_write_buffer2 PASSED              [ 59%]
tests/test_wgpu_native_buffer.py::test_write_buffer3 PASSED              [ 60%]
tests/test_wgpu_native_buffer.py::test_buffer_map_read_and_write PASSED  [ 60%]
tests/test_wgpu_native_compute_tex.py::test_compute_tex_1d_rgba8uint PASSED [ 61%]
tests/test_wgpu_native_compute_tex.py::test_compute_tex_1d_rgba16sint FAILED [ 62%]
tests/test_wgpu_native_compute_tex.py::test_compute_tex_1d_r32sint PASSED [ 63%]
tests/test_wgpu_native_compute_tex.py::test_compute_tex_1d_r32float PASSED [ 64%]
tests/test_wgpu_native_compute_tex.py::test_compute_tex_2d_rgba8uint PASSED [ 65%]
tests/test_wgpu_native_compute_tex.py::test_compute_tex_2d_rgba16sint FAILED [ 65%]
tests/test_wgpu_native_compute_tex.py::test_compute_tex_2d_r32sint PASSED [ 66%]
tests/test_wgpu_native_compute_tex.py::test_compute_tex_2d_r32float PASSED [ 67%]
tests/test_wgpu_native_compute_tex.py::test_compute_tex_3d_rgba8uint FAILED [ 68%]
tests/test_wgpu_native_compute_tex.py::test_compute_tex_3d_rgba16sint FAILED [ 69%]
tests/test_wgpu_native_compute_tex.py::test_compute_tex_3d_r32sint FAILED [ 70%]
tests/test_wgpu_native_compute_tex.py::test_compute_tex_3d_r32float FAILED [ 70%]
tests/test_wgpu_native_errors.py::test_parse_shader_error1 PASSED        [ 71%]
tests/test_wgpu_native_errors.py::test_parse_shader_error2 PASSED        [ 72%]
tests/test_wgpu_native_errors.py::test_parse_shader_error3 PASSED        [ 73%]
tests/test_wgpu_native_errors.py::test_parse_shader_error4 PASSED        [ 74%]
tests/test_wgpu_native_errors.py::test_validate_shader_error1 PASSED     [ 75%]
tests/test_wgpu_native_errors.py::test_validate_shader_error2 PASSED     [ 75%]
tests/test_wgpu_native_render.py::test_render_orange_square PASSED       [ 76%]
tests/test_wgpu_native_render.py::test_render_orange_square_indexed PASSED [ 77%]
tests/test_wgpu_native_render.py::test_render_orange_square_indirect PASSED [ 78%]
tests/test_wgpu_native_render.py::test_render_orange_square_indexed_indirect PASSED [ 79%]
tests/test_wgpu_native_render.py::test_render_orange_square_vbo PASSED   [ 80%]
tests/test_wgpu_native_render.py::test_render_orange_square_color_attachment1 PASSED [ 80%]
tests/test_wgpu_native_render.py::test_render_orange_square_color_attachment2 PASSED [ 81%]
tests/test_wgpu_native_render.py::test_render_orange_square_viewport PASSED [ 82%]
tests/test_wgpu_native_render.py::test_render_orange_square_scissor PASSED [ 83%]
tests/test_wgpu_native_render.py::test_render_orange_square_depth16unorm FAILED [ 84%]
tests/test_wgpu_native_render.py::test_render_orange_square_depth24plus_stencil8 PASSED [ 85%]
tests/test_wgpu_native_render.py::test_render_orange_square_depth32float PASSED [ 85%]
tests/test_wgpu_native_render.py::test_render_orange_dots PASSED         [ 86%]
tests/test_wgpu_native_render_tex.py::test_render_textured_square_rgba8unorm PASSED [ 87%]
tests/test_wgpu_native_render_tex.py::test_render_textured_square_rgba8uint PASSED [ 88%]
tests/test_wgpu_native_render_tex.py::test_render_textured_square_rgba16sint FAILED [ 89%]
tests/test_wgpu_native_render_tex.py::test_render_textured_square_rgba32float FAILED [ 90%]
tests/test_wgpu_native_render_tex.py::test_render_textured_square_rg8unorm PASSED [ 90%]
tests/test_wgpu_native_render_tex.py::test_render_textured_square_rg8uint PASSED [ 91%]
tests/test_wgpu_native_render_tex.py::test_render_textured_square_rg16sint PASSED [ 92%]
tests/test_wgpu_native_render_tex.py::test_render_textured_square_rg32float FAILED [ 93%]
tests/test_wgpu_native_render_tex.py::test_render_textured_square_r8unorm PASSED [ 94%]
tests/test_wgpu_native_render_tex.py::test_render_textured_square_r8uint PASSED [ 95%]
tests/test_wgpu_native_render_tex.py::test_render_textured_square_r16sint PASSED [ 95%]
tests/test_wgpu_native_render_tex.py::test_render_textured_square_r32sint PASSED [ 96%]
tests/test_wgpu_native_render_tex.py::test_render_textured_square_r32float PASSED [ 97%]
tests/test_wgpu_native_texture.py::test_do_a_copy_roundtrip PASSED       [ 98%]
tests/test_wgpu_native_texture.py::test_write_texture1 PASSED            [ 99%]
tests/test_wgpu_native_texture.py::test_write_texture2 PASSED            [100%]

=================================== FAILURES ===================================
___________________________ test_glfw_canvas_render ____________________________

def test_glfw_canvas_render():
    """Render an orange square ... in a glfw window."""

    import glfw
    from wgpu.gui.glfw import update_glfw_canvasses, WgpuCanvas

    loop = asyncio.get_event_loop()

    canvas = WgpuCanvas(max_fps=9999)

    device = wgpu.utils.get_default_device()
    draw_frame1 = _get_draw_function(device, canvas)

    frame_counter = 0

    def draw_frame2():
        nonlocal frame_counter
        frame_counter += 1
        draw_frame1()

    canvas.request_draw(draw_frame2)

    # Give it a few rounds to start up
    async def miniloop():
        for i in range(10):
            glfw.poll_events()
            update_glfw_canvasses()
            await asyncio.sleep(0.01)

    loop.run_until_complete(miniloop())
    # There should have been exactly one draw now
    assert frame_counter == 1

    # Ask for a lot of draws
    for i in range(5):
        canvas.request_draw()
    # Process evens for a while
    loop.run_until_complete(miniloop())
    # We should have had just one draw
    assert frame_counter == 2

    # Change the canvase size
    canvas.set_logical_size(300, 200)
    canvas.set_logical_size(400, 300)
    # We should have had just one draw
    loop.run_until_complete(miniloop())
  assert frame_counter == 3

E assert 5 == 3

tests/test_gui_glfw.py:151: AssertionError
________________________ test_compute_tex_1d_rgba16sint ________________________

def test_compute_tex_1d_rgba16sint():
    compute_shader = """
        @group(0) @binding(0)
        var r_tex1: texture_1d<i32>;

        @group(0) @binding(1)
        var r_tex2: texture_storage_1d<rgba16sint,write>;

        @compute @workgroup_size(1)
        fn main(@builtin(global_invocation_id) index: vec3<u32>) {
            let i: i32 = i32(index.x);
            let color1 : vec4<i32> = textureLoad(r_tex1, i, 0);
            let color2 = vec4<i32>(color1.x + i, color1.y + 1, color1.z * 2, color1.a);
            textureStore(r_tex2, i, color2);
        }
    """

    # Generate data
    nx, ny, nz, nc = 128, 1, 1, 4
    data1 = (ctypes.c_int16 * nc * nx)()
    for x in range(nx):
        for c in range(nc):
            data1[x][c] = random.randint(0, 20)

    # Compute and validate
  _compute_texture(
        compute_shader,
        wgpu.TextureFormat.rgba16sint,
        wgpu.TextureDimension.d1,
        (nx, ny, nz, nc),
        data1,
    )

tests/test_wgpu_native_compute_tex.py:80:


tests/test_wgpu_native_compute_tex.py:522: in _compute_texture
bind_group = device.create_bind_group(layout=bind_group_layout, entries=bindings)
wgpu/backends/wgpu_native/_api.py:1213: in create_bind_group
id = libf.wgpuDeviceCreateBindGroup(self._internal, struct)


args = (<cdata 'struct WGPUDeviceImpl *' 0x333baa10>, <cdata 'WGPUBindGroupDescriptor *' owning 40 bytes>)
handle_error = <bound method SafeLibCalls._handle_error of <wgpu.backends.wgpu_native._helpers.SafeLibCalls object at 0x7f9a827d90>>
result = <cdata 'struct WGPUBindGroupImpl *' 0x33f60210>
error_type = 'Validation'

def proxy_func(*args):
    # Make the call, with error capturing on
    handle_error = self._handle_error
    self._error_handler.capture(handle_error)
    try:
        result = ob(*args)
    finally:
        self._error_handler.release(handle_error)

    # Handle the error.
    if self._error_message:
        error_type, message = self._error_message
        self._error_message = None
        cls = ERROR_TYPES.get(error_type, GPUError)
        wgpu_error = cls(message)
        # The line below will be the bottom line in the traceback,
        # so better make it informative! As far as I know there is
        # no way to exclude this frame from the traceback.
      raise wgpu_error  # the frame above is more interesting ↑↑

E wgpu._classes.GPUValidationError: Validation Error
E
E Caused by:
E In wgpuDeviceCreateBindGroup
E Texture binding 0 expects sample type = Sint, but given a view with format = Rgba16Uint

wgpu/backends/wgpu_native/_helpers.py:314: GPUValidationError
________________________ test_compute_tex_2d_rgba16sint ________________________

def test_compute_tex_2d_rgba16sint():
    compute_shader = """
        @group(0) @binding(0)
        var r_tex1: texture_2d<i32>;

        @group(0) @binding(1)
        var r_tex2: texture_storage_2d<rgba16sint, write>;

        @compute @workgroup_size(1)
        fn main(@builtin(global_invocation_id) index: vec3<u32>) {
            let i = vec2<i32>(index.xy);
            let color1: vec4<i32> = textureLoad(r_tex1, i, 0);
            let color2 = vec4<i32>(color1.x + i.x, color1.y + 1, color1.z * 2, color1.a);
            textureStore(r_tex2, i, color2);
        }
    """

    # Generate data
    nx, ny, nz, nc = 128, 8, 1, 4
    data1 = (ctypes.c_int16 * nc * nx * ny)()
    for y in range(ny):
        for x in range(nx):
            for c in range(nc):
                data1[y][x][c] = random.randint(0, 20)

    # Compute and validate
  _compute_texture(
        compute_shader,
        wgpu.TextureFormat.rgba16sint,
        wgpu.TextureDimension.d2,
        (nx, ny, nz, nc),
        data1,
    )

tests/test_wgpu_native_compute_tex.py:221:


tests/test_wgpu_native_compute_tex.py:522: in _compute_texture
bind_group = device.create_bind_group(layout=bind_group_layout, entries=bindings)
wgpu/backends/wgpu_native/_api.py:1213: in create_bind_group
id = libf.wgpuDeviceCreateBindGroup(self._internal, struct)


args = (<cdata 'struct WGPUDeviceImpl *' 0x333baa10>, <cdata 'WGPUBindGroupDescriptor *' owning 40 bytes>)
handle_error = <bound method SafeLibCalls._handle_error of <wgpu.backends.wgpu_native._helpers.SafeLibCalls object at 0x7f9a827d90>>
result = <cdata 'struct WGPUBindGroupImpl *' 0x33ec45a0>
error_type = 'Validation'

def proxy_func(*args):
    # Make the call, with error capturing on
    handle_error = self._handle_error
    self._error_handler.capture(handle_error)
    try:
        result = ob(*args)
    finally:
        self._error_handler.release(handle_error)

    # Handle the error.
    if self._error_message:
        error_type, message = self._error_message
        self._error_message = None
        cls = ERROR_TYPES.get(error_type, GPUError)
        wgpu_error = cls(message)
        # The line below will be the bottom line in the traceback,
        # so better make it informative! As far as I know there is
        # no way to exclude this frame from the traceback.
      raise wgpu_error  # the frame above is more interesting ↑↑

E wgpu._classes.GPUValidationError: Validation Error
E
E Caused by:
E In wgpuDeviceCreateBindGroup
E Texture binding 0 expects sample type = Sint, but given a view with format = Rgba16Uint

wgpu/backends/wgpu_native/_helpers.py:314: GPUValidationError
________________________ test_compute_tex_3d_rgba8uint _________________________

def test_compute_tex_3d_rgba8uint():
    compute_shader = """
        @group(0) @binding(0)
        var r_tex1: texture_3d<u32>;

        @group(0) @binding(1)
        var r_tex2: texture_storage_3d<rgba8uint,write>;

        @compute @workgroup_size(1)
        fn main(@builtin(global_invocation_id) index: vec3<u32>) {
            let i = vec3<i32>(index);
            let color1 = vec4<i32>(textureLoad(r_tex1, i, 0));
            let color2 = vec4<i32>(color1.x + i.x, color1.y + 1, color1.z * 2, color1.a);
            textureStore(r_tex2, i, vec4<u32>(color2));
        }
    """

    # Generate data
    nx, ny, nz, nc = 64, 8, 6, 4
    data1 = (ctypes.c_uint8 * nc * nx * ny * nz)()
    for z in range(nz):
        for y in range(ny):
            for x in range(nx):
                for c in range(nc):
                    data1[z][y][x][c] = random.randint(0, 20)

    # Compute and validate
  _compute_texture(
        compute_shader,
        wgpu.TextureFormat.rgba8uint,
        wgpu.TextureDimension.d3,
        (nx, ny, nz, nc),
        data1,
    )

tests/test_wgpu_native_compute_tex.py:330:


compute_shader = '\n @group(0) @binding(0)\n var r_tex1: texture_3d;\n\n @group(0) @binding(1)\n var r... i.x, color1.y + 1, color1.z * 2, color1.a);\n textureStore(r_tex2, i, vec4(color2));\n }\n '
texture_format = 'rgba8uint', texture_dim = '3d', texture_size = (64, 8, 6, 4)
data1 = <test_wgpu_native_compute_tex.c_ubyte_Array_4_Array_64_Array_8_Array_6 object at 0x7f9956f380>

def _compute_texture(compute_shader, texture_format, texture_dim, texture_size, data1):
    """
    Apply a computation on a texture and validate the result. The shader should:
    * Add the x-coordinate to the red channel.
    * Add 1 to the green channel.
    * Multiply the blue channel by 2.
    * The alpha channel must remain equal.
    """

    nx, ny, nz, nc = texture_size
    nbytes = ctypes.sizeof(data1)
    bpp = nbytes // (nx * ny * nz)  # bytes per pixel

    device = get_default_device()
    cshader = device.create_shader_module(code=compute_shader)

    # Create textures and views
    texture1 = device.create_texture(
        size=(nx, ny, nz),
        dimension=texture_dim,
        format=texture_format,
        usage=wgpu.TextureUsage.TEXTURE_BINDING | wgpu.TextureUsage.COPY_DST,
    )
    texture2 = device.create_texture(
        size=(nx, ny, nz),
        dimension=texture_dim,
        format=texture_format,
        usage=wgpu.TextureUsage.STORAGE_BINDING | wgpu.TextureUsage.COPY_SRC,
    )
    texture_view1 = texture1.create_view()
    texture_view2 = texture2.create_view()

    # Create buffer that we need to upload the data
    buffer_usage = wgpu.BufferUsage.COPY_SRC | wgpu.BufferUsage.COPY_DST
    buffer = device.create_buffer_with_data(data=data1, usage=buffer_usage)
    assert buffer.usage == buffer_usage

    texture_sample_type = "unfilterable-float"
    if "uint" in texture_format:
        texture_sample_type = "uint"
    elif "sint" in texture_format:
        texture_sample_type = "sint"

    # Define bindings
    # One can see here why we need 2 textures: one is readonly, one writeonly
    bindings = [
        {"binding": 0, "resource": texture_view1},
        {"binding": 1, "resource": texture_view2},
    ]
    binding_layouts = [
        {
            "binding": 0,
            "visibility": wgpu.ShaderStage.COMPUTE,
            "texture": {
                "sample_type": texture_sample_type,
                "view_dimension": texture_dim,
            },
        },
        {
            "binding": 1,
            "visibility": wgpu.ShaderStage.COMPUTE,
            "storage_texture": {
                "access": wgpu.StorageTextureAccess.write_only,
                "format": texture_format,
                "view_dimension": texture_dim,
            },
        },
    ]
    bind_group_layout = device.create_bind_group_layout(entries=binding_layouts)
    pipeline_layout = device.create_pipeline_layout(
        bind_group_layouts=[bind_group_layout]
    )
    bind_group = device.create_bind_group(layout=bind_group_layout, entries=bindings)

    # Create a pipeline and run it
    compute_pipeline = device.create_compute_pipeline(
        layout=pipeline_layout,
        compute={"module": cshader, "entry_point": "main"},
    )
    command_encoder = device.create_command_encoder()

    if False:  # Upload via alt route (that does not have 256 alignment constraint)
        device.queue.write_texture(
            {"texture": texture1},
            data1,
            {"bytes_per_row": bpp * nx, "rows_per_image": ny},
            (nx, ny, nz),
        )
    else:
        command_encoder.copy_buffer_to_texture(
            {
                "buffer": buffer,
                "offset": 0,
                "bytes_per_row": bpp * nx,
                "rows_per_image": ny,
            },
            {"texture": texture1, "mip_level": 0, "origin": (0, 0, 0)},
            (nx, ny, nz),
        )
    compute_pass = command_encoder.begin_compute_pass()
    compute_pass.push_debug_group("foo")
    compute_pass.insert_debug_marker("setting pipeline")
    compute_pass.set_pipeline(compute_pipeline)
    compute_pass.insert_debug_marker("setting bind group")
    compute_pass.set_bind_group(
        0, bind_group, [], 0, 999999
    )  # last 2 elements not used
    compute_pass.insert_debug_marker("dispatch!")
    compute_pass.dispatch_workgroups(nx, ny, nz)
    compute_pass.pop_debug_group()
    compute_pass.end()
    command_encoder.copy_texture_to_buffer(
        {"texture": texture2, "mip_level": 0, "origin": (0, 0, 0)},
        {
            "buffer": buffer,
            "offset": 0,
            "bytes_per_row": bpp * nx,
            "rows_per_image": ny,
        },
        (nx, ny, nz),
    )
    device.queue.submit([command_encoder.finish()])

    # Read the current data of the output buffer
    data2 = data1.__class__.from_buffer(device.queue.read_buffer(buffer))

    # Numpy arrays are easier to work with
    a1 = np.ctypeslib.as_array(data1).reshape(nz, ny, nx, nc)
    a2 = np.ctypeslib.as_array(data2).reshape(nz, ny, nx, nc)

    # Validate!
    for x in range(nx):
      assert np.all(a2[:, :, x, 0] == a1[:, :, x, 0] + x)

E AssertionError: assert False
E + where False = <function all at 0x7f9ab82ab0>(array([[ 2, 1..., dtype=uint8) == array([[ 2, 1..., dtype=uint8)
E + where <function all at 0x7f9ab82ab0> = np.all
E Full diff:
E array([[ 2, 15, 0, 20, 20, 11, 18, 4],
E - [14, 0, 18, 11, 17, 1, 4, 11],
E - [ 4, 17, 14, 6, 20, 15, 5, 16],
E - [12, 10, 10, 20, 11, 8, 18, 9],
E ? ^ ---- ---- ^
E + [ 2, 15, 0, 20, 20, 11, 18, 4],...
E
E ...Full output truncated (8 lines hidden), use '-vv' to show)

tests/test_wgpu_native_compute_tex.py:582: AssertionError
________________________ test_compute_tex_3d_rgba16sint ________________________

def test_compute_tex_3d_rgba16sint():
    compute_shader = """
        @group(0) @binding(0)
        var r_tex1: texture_3d<i32>;

        @group(0) @binding(1)
        var r_tex2: texture_storage_3d<rgba16sint,write>;

        @compute @workgroup_size(1)
        fn main(@builtin(global_invocation_id) index: vec3<u32>) {
            let i = vec3<i32>(index);
            let color1: vec4<i32> = textureLoad(r_tex1, i, 0);
            let color2 = vec4<i32>(color1.x + i.x, color1.y + 1, color1.z * 2, color1.a);
            textureStore(r_tex2, i, color2);
        }
    """

    # Generate data
    nx, ny, nz, nc = 128, 8, 6, 4
    data1 = (ctypes.c_int16 * nc * nx * ny * nz)()
    for z in range(nz):
        for y in range(ny):
            for x in range(nx):
                for c in range(nc):
                    data1[z][y][x][c] = random.randint(0, 20)

    # Compute and validate
  _compute_texture(
        compute_shader,
        wgpu.TextureFormat.rgba16sint,
        wgpu.TextureDimension.d3,
        (nx, ny, nz, nc),
        data1,
    )

tests/test_wgpu_native_compute_tex.py:366:


tests/test_wgpu_native_compute_tex.py:522: in _compute_texture
bind_group = device.create_bind_group(layout=bind_group_layout, entries=bindings)
wgpu/backends/wgpu_native/_api.py:1213: in create_bind_group
id = libf.wgpuDeviceCreateBindGroup(self._internal, struct)


args = (<cdata 'struct WGPUDeviceImpl *' 0x333baa10>, <cdata 'WGPUBindGroupDescriptor *' owning 40 bytes>)
handle_error = <bound method SafeLibCalls._handle_error of <wgpu.backends.wgpu_native._helpers.SafeLibCalls object at 0x7f9a827d90>>
result = <cdata 'struct WGPUBindGroupImpl *' 0x33ea1930>
error_type = 'Validation'

def proxy_func(*args):
    # Make the call, with error capturing on
    handle_error = self._handle_error
    self._error_handler.capture(handle_error)
    try:
        result = ob(*args)
    finally:
        self._error_handler.release(handle_error)

    # Handle the error.
    if self._error_message:
        error_type, message = self._error_message
        self._error_message = None
        cls = ERROR_TYPES.get(error_type, GPUError)
        wgpu_error = cls(message)
        # The line below will be the bottom line in the traceback,
        # so better make it informative! As far as I know there is
        # no way to exclude this frame from the traceback.
      raise wgpu_error  # the frame above is more interesting ↑↑

E wgpu._classes.GPUValidationError: Validation Error
E
E Caused by:
E In wgpuDeviceCreateBindGroup
E Texture binding 0 expects sample type = Sint, but given a view with format = Rgba16Uint

wgpu/backends/wgpu_native/_helpers.py:314: GPUValidationError
_________________________ test_compute_tex_3d_r32sint __________________________

def test_compute_tex_3d_r32sint():
    compute_shader = """
        @group(0) @binding(0)
        var r_tex1: texture_3d<i32>;

        @group(0) @binding(1)
        var r_tex2: texture_storage_3d<r32sint,write>;

        @compute @workgroup_size(1)
        fn main(@builtin(global_invocation_id) index: vec3<u32>) {
            let i = vec3<i32>(index);
            let color1: vec4<i32> = textureLoad(r_tex1, i, 0);
            let color2 = vec4<i32>(color1.x + i.x, color1.y + 1, color1.z * 2, color1.a);
            textureStore(r_tex2, i, color2);
        }
    """

    # Generate data
    nx, ny, nz, nc = 256, 8, 6, 1
    data1 = (ctypes.c_int32 * nc * nx * ny * nz)()
    for z in range(nz):
        for y in range(ny):
            for x in range(nx):
                for c in range(nc):
                    data1[z][y][x][c] = random.randint(0, 20)

    # Compute and validate
  _compute_texture(
        compute_shader,
        wgpu.TextureFormat.r32sint,
        wgpu.TextureDimension.d3,
        (nx, ny, nz, nc),
        data1,
    )

tests/test_wgpu_native_compute_tex.py:402:


compute_shader = '\n @group(0) @binding(0)\n var r_tex1: texture_3d;\n\n @group(0) @binding(1)\n var r...(color1.x + i.x, color1.y + 1, color1.z * 2, color1.a);\n textureStore(r_tex2, i, color2);\n }\n '
texture_format = 'r32sint', texture_dim = '3d', texture_size = (256, 8, 6, 1)
data1 = <test_wgpu_native_compute_tex.c_int_Array_1_Array_256_Array_8_Array_6 object at 0x7f9956fb60>

def _compute_texture(compute_shader, texture_format, texture_dim, texture_size, data1):
    """
    Apply a computation on a texture and validate the result. The shader should:
    * Add the x-coordinate to the red channel.
    * Add 1 to the green channel.
    * Multiply the blue channel by 2.
    * The alpha channel must remain equal.
    """

    nx, ny, nz, nc = texture_size
    nbytes = ctypes.sizeof(data1)
    bpp = nbytes // (nx * ny * nz)  # bytes per pixel

    device = get_default_device()
    cshader = device.create_shader_module(code=compute_shader)

    # Create textures and views
    texture1 = device.create_texture(
        size=(nx, ny, nz),
        dimension=texture_dim,
        format=texture_format,
        usage=wgpu.TextureUsage.TEXTURE_BINDING | wgpu.TextureUsage.COPY_DST,
    )
    texture2 = device.create_texture(
        size=(nx, ny, nz),
        dimension=texture_dim,
        format=texture_format,
        usage=wgpu.TextureUsage.STORAGE_BINDING | wgpu.TextureUsage.COPY_SRC,
    )
    texture_view1 = texture1.create_view()
    texture_view2 = texture2.create_view()

    # Create buffer that we need to upload the data
    buffer_usage = wgpu.BufferUsage.COPY_SRC | wgpu.BufferUsage.COPY_DST
    buffer = device.create_buffer_with_data(data=data1, usage=buffer_usage)
    assert buffer.usage == buffer_usage

    texture_sample_type = "unfilterable-float"
    if "uint" in texture_format:
        texture_sample_type = "uint"
    elif "sint" in texture_format:
        texture_sample_type = "sint"

    # Define bindings
    # One can see here why we need 2 textures: one is readonly, one writeonly
    bindings = [
        {"binding": 0, "resource": texture_view1},
        {"binding": 1, "resource": texture_view2},
    ]
    binding_layouts = [
        {
            "binding": 0,
            "visibility": wgpu.ShaderStage.COMPUTE,
            "texture": {
                "sample_type": texture_sample_type,
                "view_dimension": texture_dim,
            },
        },
        {
            "binding": 1,
            "visibility": wgpu.ShaderStage.COMPUTE,
            "storage_texture": {
                "access": wgpu.StorageTextureAccess.write_only,
                "format": texture_format,
                "view_dimension": texture_dim,
            },
        },
    ]
    bind_group_layout = device.create_bind_group_layout(entries=binding_layouts)
    pipeline_layout = device.create_pipeline_layout(
        bind_group_layouts=[bind_group_layout]
    )
    bind_group = device.create_bind_group(layout=bind_group_layout, entries=bindings)

    # Create a pipeline and run it
    compute_pipeline = device.create_compute_pipeline(
        layout=pipeline_layout,
        compute={"module": cshader, "entry_point": "main"},
    )
    command_encoder = device.create_command_encoder()

    if False:  # Upload via alt route (that does not have 256 alignment constraint)
        device.queue.write_texture(
            {"texture": texture1},
            data1,
            {"bytes_per_row": bpp * nx, "rows_per_image": ny},
            (nx, ny, nz),
        )
    else:
        command_encoder.copy_buffer_to_texture(
            {
                "buffer": buffer,
                "offset": 0,
                "bytes_per_row": bpp * nx,
                "rows_per_image": ny,
            },
            {"texture": texture1, "mip_level": 0, "origin": (0, 0, 0)},
            (nx, ny, nz),
        )
    compute_pass = command_encoder.begin_compute_pass()
    compute_pass.push_debug_group("foo")
    compute_pass.insert_debug_marker("setting pipeline")
    compute_pass.set_pipeline(compute_pipeline)
    compute_pass.insert_debug_marker("setting bind group")
    compute_pass.set_bind_group(
        0, bind_group, [], 0, 999999
    )  # last 2 elements not used
    compute_pass.insert_debug_marker("dispatch!")
    compute_pass.dispatch_workgroups(nx, ny, nz)
    compute_pass.pop_debug_group()
    compute_pass.end()
    command_encoder.copy_texture_to_buffer(
        {"texture": texture2, "mip_level": 0, "origin": (0, 0, 0)},
        {
            "buffer": buffer,
            "offset": 0,
            "bytes_per_row": bpp * nx,
            "rows_per_image": ny,
        },
        (nx, ny, nz),
    )
    device.queue.submit([command_encoder.finish()])

    # Read the current data of the output buffer
    data2 = data1.__class__.from_buffer(device.queue.read_buffer(buffer))

    # Numpy arrays are easier to work with
    a1 = np.ctypeslib.as_array(data1).reshape(nz, ny, nx, nc)
    a2 = np.ctypeslib.as_array(data2).reshape(nz, ny, nx, nc)

    # Validate!
    for x in range(nx):
      assert np.all(a2[:, :, x, 0] == a1[:, :, x, 0] + x)

E AssertionError: assert False
E + where False = <function all at 0x7f9ab82ab0>(array([[20, ..., dtype=int32) == array([[20, ..., dtype=int32)
E + where <function all at 0x7f9ab82ab0> = np.all
E Full diff:
E array([[20, 7, 17, 13, 7, 15, 1, 2],
E - [10, 2, 17, 14, 8, 2, 17, 15],
E - [19, 10, 14, 5, 20, 10, 19, 15],
E - [12, 2, 10, 15, 16, 19, 12, 9],
E - [14, 7, 9, 15, 1, 7, 8, 7],
E + [20, 7, 17, 13, 7, 15, 1, 2],...
E
E ...Full output truncated (8 lines hidden), use '-vv' to show)

tests/test_wgpu_native_compute_tex.py:582: AssertionError
_________________________ test_compute_tex_3d_r32float _________________________

def test_compute_tex_3d_r32float():
    compute_shader = """
        @group(0) @binding(0)
        var r_tex1: texture_3d<f32>;

        @group(0) @binding(1)
        var r_tex2: texture_storage_3d<r32float,write>;

        @compute @workgroup_size(1)
        fn main(@builtin(global_invocation_id) index: vec3<u32>) {
            let i = vec3<i32>(index);
            let color1: vec4<f32> = textureLoad(r_tex1, i, 0);
            let color2 = vec4<f32>(color1.x + f32(i.x), color1.y + 1.0, color1.z * 2.0, color1.a);
            textureStore(r_tex2, i, color2);
        }
    """

    # Generate data
    nx, ny, nz, nc = 64, 8, 6, 1
    data1 = (ctypes.c_float * nc * nx * ny * nz)()
    for z in range(nz):
        for y in range(ny):
            for x in range(nx):
                for c in range(nc):
                    data1[z][y][x][c] = random.randint(0, 20)

    # Compute and validate
  _compute_texture(
        compute_shader,
        wgpu.TextureFormat.r32float,
        wgpu.TextureDimension.d3,
        (nx, ny, nz, nc),
        data1,
    )

tests/test_wgpu_native_compute_tex.py:438:


compute_shader = '\n @group(0) @binding(0)\n var r_tex1: texture_3d;\n\n @group(0) @binding(1)\n var r... + f32(i.x), color1.y + 1.0, color1.z * 2.0, color1.a);\n textureStore(r_tex2, i, color2);\n }\n '
texture_format = 'r32float', texture_dim = '3d', texture_size = (64, 8, 6, 1)
data1 = <test_wgpu_native_compute_tex.c_float_Array_1_Array_64_Array_8_Array_6 object at 0x7f995835c0>

def _compute_texture(compute_shader, texture_format, texture_dim, texture_size, data1):
    """
    Apply a computation on a texture and validate the result. The shader should:
    * Add the x-coordinate to the red channel.
    * Add 1 to the green channel.
    * Multiply the blue channel by 2.
    * The alpha channel must remain equal.
    """

    nx, ny, nz, nc = texture_size
    nbytes = ctypes.sizeof(data1)
    bpp = nbytes // (nx * ny * nz)  # bytes per pixel

    device = get_default_device()
    cshader = device.create_shader_module(code=compute_shader)

    # Create textures and views
    texture1 = device.create_texture(
        size=(nx, ny, nz),
        dimension=texture_dim,
        format=texture_format,
        usage=wgpu.TextureUsage.TEXTURE_BINDING | wgpu.TextureUsage.COPY_DST,
    )
    texture2 = device.create_texture(
        size=(nx, ny, nz),
        dimension=texture_dim,
        format=texture_format,
        usage=wgpu.TextureUsage.STORAGE_BINDING | wgpu.TextureUsage.COPY_SRC,
    )
    texture_view1 = texture1.create_view()
    texture_view2 = texture2.create_view()

    # Create buffer that we need to upload the data
    buffer_usage = wgpu.BufferUsage.COPY_SRC | wgpu.BufferUsage.COPY_DST
    buffer = device.create_buffer_with_data(data=data1, usage=buffer_usage)
    assert buffer.usage == buffer_usage

    texture_sample_type = "unfilterable-float"
    if "uint" in texture_format:
        texture_sample_type = "uint"
    elif "sint" in texture_format:
        texture_sample_type = "sint"

    # Define bindings
    # One can see here why we need 2 textures: one is readonly, one writeonly
    bindings = [
        {"binding": 0, "resource": texture_view1},
        {"binding": 1, "resource": texture_view2},
    ]
    binding_layouts = [
        {
            "binding": 0,
            "visibility": wgpu.ShaderStage.COMPUTE,
            "texture": {
                "sample_type": texture_sample_type,
                "view_dimension": texture_dim,
            },
        },
        {
            "binding": 1,
            "visibility": wgpu.ShaderStage.COMPUTE,
            "storage_texture": {
                "access": wgpu.StorageTextureAccess.write_only,
                "format": texture_format,
                "view_dimension": texture_dim,
            },
        },
    ]
    bind_group_layout = device.create_bind_group_layout(entries=binding_layouts)
    pipeline_layout = device.create_pipeline_layout(
        bind_group_layouts=[bind_group_layout]
    )
    bind_group = device.create_bind_group(layout=bind_group_layout, entries=bindings)

    # Create a pipeline and run it
    compute_pipeline = device.create_compute_pipeline(
        layout=pipeline_layout,
        compute={"module": cshader, "entry_point": "main"},
    )
    command_encoder = device.create_command_encoder()

    if False:  # Upload via alt route (that does not have 256 alignment constraint)
        device.queue.write_texture(
            {"texture": texture1},
            data1,
            {"bytes_per_row": bpp * nx, "rows_per_image": ny},
            (nx, ny, nz),
        )
    else:
        command_encoder.copy_buffer_to_texture(
            {
                "buffer": buffer,
                "offset": 0,
                "bytes_per_row": bpp * nx,
                "rows_per_image": ny,
            },
            {"texture": texture1, "mip_level": 0, "origin": (0, 0, 0)},
            (nx, ny, nz),
        )
    compute_pass = command_encoder.begin_compute_pass()
    compute_pass.push_debug_group("foo")
    compute_pass.insert_debug_marker("setting pipeline")
    compute_pass.set_pipeline(compute_pipeline)
    compute_pass.insert_debug_marker("setting bind group")
    compute_pass.set_bind_group(
        0, bind_group, [], 0, 999999
    )  # last 2 elements not used
    compute_pass.insert_debug_marker("dispatch!")
    compute_pass.dispatch_workgroups(nx, ny, nz)
    compute_pass.pop_debug_group()
    compute_pass.end()
    command_encoder.copy_texture_to_buffer(
        {"texture": texture2, "mip_level": 0, "origin": (0, 0, 0)},
        {
            "buffer": buffer,
            "offset": 0,
            "bytes_per_row": bpp * nx,
            "rows_per_image": ny,
        },
        (nx, ny, nz),
    )
    device.queue.submit([command_encoder.finish()])

    # Read the current data of the output buffer
    data2 = data1.__class__.from_buffer(device.queue.read_buffer(buffer))

    # Numpy arrays are easier to work with
    a1 = np.ctypeslib.as_array(data1).reshape(nz, ny, nx, nc)
    a2 = np.ctypeslib.as_array(data2).reshape(nz, ny, nx, nc)

    # Validate!
    for x in range(nx):
      assert np.all(a2[:, :, x, 0] == a1[:, :, x, 0] + x)

E AssertionError: assert False
E + where False = <function all at 0x7f9ab82ab0>(array([[ 7., ...dtype=float32) == array([[ 7., ...dtype=float32)
E + where <function all at 0x7f9ab82ab0> = np.all
E Full diff:
E array([[ 7., 3., 3., 15., 15., 0., 18., 5.],
E - [18., 1., 19., 15., 7., 20., 16., 9.],
E - [16., 2., 18., 1., 7., 19., 17., 13.],
E - [16., 12., 9., 18., 4., 13., 2., 17.],
E - [ 6., 4., 18., 15., 1., 14., 10., 16.],
E - [16., 10., 19., 19., 16., 19., 1., 16.]], dtype=float32,...
E
E ...Full output truncated (6 lines hidden), use '-vv' to show)

tests/test_wgpu_native_compute_tex.py:582: AssertionError
____________________ test_render_orange_square_depth16unorm ____________________

def test_render_orange_square_depth16unorm():
    """Render an orange square, but disable half of it using a depth test using 16 bits."""
  _render_orange_square_depth(wgpu.TextureFormat.depth16unorm)

tests/test_wgpu_native_render.py:453:


tests/test_wgpu_native_render.py:539: in _render_orange_square_depth
a = render_to_texture(
tests/renderutils.py:103: in render_to_texture
render_pipeline = device.create_render_pipeline(
wgpu/backends/wgpu_native/_api.py:1572: in create_render_pipeline
id = libf.wgpuDeviceCreateRenderPipeline(self._internal, struct)


args = (<cdata 'struct WGPUDeviceImpl *' 0x333baa10>, <cdata 'WGPURenderPipelineDescriptor *' owning 144 bytes>)
handle_error = <bound method SafeLibCalls._handle_error of <wgpu.backends.wgpu_native._helpers.SafeLibCalls object at 0x7f9a827d90>>
result = <cdata 'struct WGPURenderPipelineImpl *' 0x342e8540>
error_type = 'Validation'

def proxy_func(*args):
    # Make the call, with error capturing on
    handle_error = self._handle_error
    self._error_handler.capture(handle_error)
    try:
        result = ob(*args)
    finally:
        self._error_handler.release(handle_error)

    # Handle the error.
    if self._error_message:
        error_type, message = self._error_message
        self._error_message = None
        cls = ERROR_TYPES.get(error_type, GPUError)
        wgpu_error = cls(message)
        # The line below will be the bottom line in the traceback,
        # so better make it informative! As far as I know there is
        # no way to exclude this frame from the traceback.
      raise wgpu_error  # the frame above is more interesting ↑↑

E wgpu._classes.GPUValidationError: Validation Error
E
E Caused by:
E In wgpuDeviceCreateRenderPipeline
E Depth/stencil state is invalid
E Format Stencil8 does not have a depth aspect, but depth test/write is enabled

wgpu/backends/wgpu_native/_helpers.py:314: GPUValidationError
____________________ test_render_textured_square_rgba16sint ____________________

def test_render_textured_square_rgba16sint():
    """Test a texture with format rgba16sint."""

    fragment_shader = """
        @group(0) @binding(0)
        var r_tex: texture_2d<i32>;
        @group(0) @binding(1)
        var r_sampler: sampler;

        @fragment
        fn fs_main(in: VertexOutput, ) -> @location(0) vec4<f32> {
            // let sample = textureSample(r_tex, r_sampler, in.texcoord);
            let texcoords_u = vec2<i32>(in.texcoord * vec2<f32>(textureDimensions(r_tex)));
            let sample = textureLoad(r_tex, texcoords_u, 0);
            return vec4<f32>(sample) / 255.0;
        }
    """

    # Create texture data
    nx, ny, nz = 256, 256, 1
    x = _create_data(
        (50, 50, 0, 255), (100, 100, 0, 255), (150, 150, 0, 255), (200, 200, 0, 255)
    )
    texture_data = (ctypes.c_int16 * (4 * nx * ny))(*x)

    # Render and validate
  render_textured_square(
        fragment_shader, wgpu.TextureFormat.rgba16sint, (nx, ny, nz), texture_data
    )

tests/test_wgpu_native_render_tex.py:148:


tests/test_wgpu_native_render_tex.py:529: in render_textured_square
bind_group = device.create_bind_group(layout=bind_group_layout, entries=bindings)
wgpu/backends/wgpu_native/_api.py:1213: in create_bind_group
id = libf.wgpuDeviceCreateBindGroup(self._internal, struct)


args = (<cdata 'struct WGPUDeviceImpl *' 0x333baa10>, <cdata 'WGPUBindGroupDescriptor *' owning 40 bytes>)
handle_error = <bound method SafeLibCalls._handle_error of <wgpu.backends.wgpu_native._helpers.SafeLibCalls object at 0x7f9a827d90>>
result = <cdata 'struct WGPUBindGroupImpl *' 0x33d4c650>
error_type = 'Validation'

def proxy_func(*args):
    # Make the call, with error capturing on
    handle_error = self._handle_error
    self._error_handler.capture(handle_error)
    try:
        result = ob(*args)
    finally:
        self._error_handler.release(handle_error)

    # Handle the error.
    if self._error_message:
        error_type, message = self._error_message
        self._error_message = None
        cls = ERROR_TYPES.get(error_type, GPUError)
        wgpu_error = cls(message)
        # The line below will be the bottom line in the traceback,
        # so better make it informative! As far as I know there is
        # no way to exclude this frame from the traceback.
      raise wgpu_error  # the frame above is more interesting ↑↑

E wgpu._classes.GPUValidationError: Validation Error
E
E Caused by:
E In wgpuDeviceCreateBindGroup
E Texture binding 0 expects sample type = Sint, but given a view with format = Rgba16Uint

wgpu/backends/wgpu_native/_helpers.py:314: GPUValidationError
___________________ test_render_textured_square_rgba32float ____________________

def test_render_textured_square_rgba32float():
    """Test a texture with format rgba32float."""

    fragment_shader = """
        @group(0) @binding(0)
        var r_tex: texture_2d<f32>;
        @group(0) @binding(1)
        var r_sampler: sampler;

        @fragment
        fn fs_main(in: VertexOutput, ) -> @location(0) vec4<f32> {
            let sample = textureSample(r_tex, r_sampler, in.texcoord);
            return sample / 255.0;
        }
    """

    # Create texture data
    nx, ny, nz = 256, 256, 1
    x = _create_data(
        (50, 50, 0, 255), (100, 100, 0, 255), (150, 150, 0, 255), (200, 200, 0, 255)
    )
    texture_data = (ctypes.c_float * (4 * nx * ny))(*x)

    # Render and validate
  render_textured_square(
        fragment_shader, wgpu.TextureFormat.rgba32float, (nx, ny, nz), texture_data
    )

tests/test_wgpu_native_render_tex.py:177:


fragment_shader = '\n @group(0) @binding(0)\n var r_tex: texture_2d;\n @group(0) @binding(1)\n var r_sa... let sample = textureSample(r_tex, r_sampler, in.texcoord);\n return sample / 255.0;\n }\n '
texture_format = 'rgba32float', texture_size = (256, 256, 1)
texture_data = <test_wgpu_native_render_tex.c_float_Array_262144 object at 0x7f99512600>

def render_textured_square(fragment_shader, texture_format, texture_size, texture_data):
    """Render, and test the result. The resulting image must be a
    gradient on R and B, zeros on G and ones on A.
    """
    nx, ny, nz = texture_size

    device = get_default_device()

    shader_source = default_vertex_shader + fragment_shader

    # Create texture
    texture = device.create_texture(
        size=(nx, ny, nz),
        dimension=wgpu.TextureDimension.d2,
        format=texture_format,
        usage=wgpu.TextureUsage.TEXTURE_BINDING | wgpu.TextureUsage.COPY_DST,
    )
    upload_to_texture(device, texture, texture_data, nx, ny, nz)

    texture_view = texture.create_view()
    # or:
    texture_view = texture.create_view(
        format=texture_format,
        dimension=wgpu.TextureDimension.d2,
    )

    sampler = device.create_sampler(mag_filter="nearest", min_filter="nearest")

    # Default sampler type.
    # Note that integer texture types cannot even use a sampler.
    sampler_type = wgpu.SamplerBindingType.filtering

    # Determine texture component type from the format
    if texture_format.endswith("norm"):
        # We can use a filtering sampler
        texture_sample_type = wgpu.TextureSampleType.float
    elif texture_format.endswith("float"):
        # On Vanilla wgpu, float32 textures cannot use a filtering
        # (interpolating) texture, (need to enable a feature for that).
        # Without it, we need to use a non-filterin sampler.
        texture_sample_type = wgpu.TextureSampleType.unfilterable_float
        sampler_type = wgpu.SamplerBindingType.non_filtering
    elif "uint" in texture_format:
        # Cannot even use a sampler (use textureLoad instwad of textureSample)
        texture_sample_type = wgpu.TextureSampleType.uint
    else:
        # Dito
        texture_sample_type = wgpu.TextureSampleType.sint

    # Bindings and layout
    bindings = [
        {"binding": 0, "resource": texture_view},
        {"binding": 1, "resource": sampler},
    ]
    binding_layouts = [
        {
            "binding": 0,
            "visibility": wgpu.ShaderStage.FRAGMENT,
            "texture": {
                "sample_type": texture_sample_type,
                "view_dimension": wgpu.TextureViewDimension.d2,
            },
        },
        {
            "binding": 1,
            "visibility": wgpu.ShaderStage.FRAGMENT,
            "sampler": {
                "type": sampler_type,
            },
        },
    ]
    bind_group_layout = device.create_bind_group_layout(entries=binding_layouts)
    pipeline_layout = device.create_pipeline_layout(
        bind_group_layouts=[bind_group_layout]
    )
    bind_group = device.create_bind_group(layout=bind_group_layout, entries=bindings)

    # Render
    render_args = device, shader_source, pipeline_layout, bind_group
    # render_to_screen(*render_args)
    a = render_to_texture(*render_args, size=(64, 64))

    # print(a.max(), a[:,:,0].max())

    # Check that the background is all zero
    bg = a.copy()
    bg[16:-16, 16:-16, :] = 0
    assert np.all(bg == 0)

    # Check the square
    sq = a[16:-16, 16:-16, :]
    ref1 = [
        [150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150],
        [150, 150, 150, 200, 200, 200],
        [200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200],
    ]
    ref2 = [
        [150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150],
        [150, 150, 150, 50, 50, 50],
        [50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50],
    ]
    ref1, ref2 = sum(ref1, []), sum(ref2, [])
  assert np.allclose(sq[0, :, 0], ref1, atol=1)

E assert False
E + where False = <function allclose at 0x7f9ab86cb0>(array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=uint8), [150, 150, 150, 150, 150, 150, ...], atol=1)
E + where <function allclose at 0x7f9ab86cb0> = np.allclose

tests/test_wgpu_native_render_tex.py:557: AssertionError
____________________ test_render_textured_square_rg32float _____________________

def test_render_textured_square_rg32float():
    """Test a texture with format rg32float.
    The GPU considers blue to be 0 and alpha to be 1.
    """

    fragment_shader = """
        @group(0) @binding(0)
        var r_tex: texture_2d<f32>;
        @group(0) @binding(1)
        var r_sampler: sampler;

        @fragment
        fn fs_main(in: VertexOutput, ) -> @location(0) vec4<f32> {
            let sample = textureSample(r_tex, r_sampler, in.texcoord);
            return vec4<f32>(sample.rg / 255.0, 0.0, 1.0);
        }
    """

    # Create texture data
    nx, ny, nz = 256, 256, 1
    x = _create_data((50, 50), (100, 100), (150, 150), (200, 200))
    texture_data = (ctypes.c_float * (2 * nx * ny))(*x)

    # Render and validate
  render_textured_square(
        fragment_shader, wgpu.TextureFormat.rg32float, (nx, ny, nz), texture_data
    )

tests/test_wgpu_native_render_tex.py:300:


fragment_shader = '\n @group(0) @binding(0)\n var r_tex: texture_2d;\n @group(0) @binding(1)\n var r_sa...ureSample(r_tex, r_sampler, in.texcoord);\n return vec4(sample.rg / 255.0, 0.0, 1.0);\n }\n '
texture_format = 'rg32float', texture_size = (256, 256, 1)
texture_data = <test_wgpu_native_render_tex.c_float_Array_131072 object at 0x7f995131d0>

def render_textured_square(fragment_shader, texture_format, texture_size, texture_data):
    """Render, and test the result. The resulting image must be a
    gradient on R and B, zeros on G and ones on A.
    """
    nx, ny, nz = texture_size

    device = get_default_device()

    shader_source = default_vertex_shader + fragment_shader

    # Create texture
    texture = device.create_texture(
        size=(nx, ny, nz),
        dimension=wgpu.TextureDimension.d2,
        format=texture_format,
        usage=wgpu.TextureUsage.TEXTURE_BINDING | wgpu.TextureUsage.COPY_DST,
    )
    upload_to_texture(device, texture, texture_data, nx, ny, nz)

    texture_view = texture.create_view()
    # or:
    texture_view = texture.create_view(
        format=texture_format,
        dimension=wgpu.TextureDimension.d2,
    )

    sampler = device.create_sampler(mag_filter="nearest", min_filter="nearest")

    # Default sampler type.
    # Note that integer texture types cannot even use a sampler.
    sampler_type = wgpu.SamplerBindingType.filtering

    # Determine texture component type from the format
    if texture_format.endswith("norm"):
        # We can use a filtering sampler
        texture_sample_type = wgpu.TextureSampleType.float
    elif texture_format.endswith("float"):
        # On Vanilla wgpu, float32 textures cannot use a filtering
        # (interpolating) texture, (need to enable a feature for that).
        # Without it, we need to use a non-filterin sampler.
        texture_sample_type = wgpu.TextureSampleType.unfilterable_float
        sampler_type = wgpu.SamplerBindingType.non_filtering
    elif "uint" in texture_format:
        # Cannot even use a sampler (use textureLoad instwad of textureSample)
        texture_sample_type = wgpu.TextureSampleType.uint
    else:
        # Dito
        texture_sample_type = wgpu.TextureSampleType.sint

    # Bindings and layout
    bindings = [
        {"binding": 0, "resource": texture_view},
        {"binding": 1, "resource": sampler},
    ]
    binding_layouts = [
        {
            "binding": 0,
            "visibility": wgpu.ShaderStage.FRAGMENT,
            "texture": {
                "sample_type": texture_sample_type,
                "view_dimension": wgpu.TextureViewDimension.d2,
            },
        },
        {
            "binding": 1,
            "visibility": wgpu.ShaderStage.FRAGMENT,
            "sampler": {
                "type": sampler_type,
            },
        },
    ]
    bind_group_layout = device.create_bind_group_layout(entries=binding_layouts)
    pipeline_layout = device.create_pipeline_layout(
        bind_group_layouts=[bind_group_layout]
    )
    bind_group = device.create_bind_group(layout=bind_group_layout, entries=bindings)

    # Render
    render_args = device, shader_source, pipeline_layout, bind_group
    # render_to_screen(*render_args)
    a = render_to_texture(*render_args, size=(64, 64))

    # print(a.max(), a[:,:,0].max())

    # Check that the background is all zero
    bg = a.copy()
    bg[16:-16, 16:-16, :] = 0
    assert np.all(bg == 0)

    # Check the square
    sq = a[16:-16, 16:-16, :]
    ref1 = [
        [150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150],
        [150, 150, 150, 200, 200, 200],
        [200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200],
    ]
    ref2 = [
        [150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150],
        [150, 150, 150, 50, 50, 50],
        [50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50],
    ]
    ref1, ref2 = sum(ref1, []), sum(ref2, [])
  assert np.allclose(sq[0, :, 0], ref1, atol=1)

E assert False
E + where False = <function allclose at 0x7f9ab86cb0>(array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=uint8), [150, 150, 150, 150, 150, 150, ...], atol=1)
E + where <function allclose at 0x7f9ab86cb0> = np.allclose

tests/test_wgpu_native_render_tex.py:557: AssertionError

=========================== short test summary info ============================
FAILED tests/test_gui_glfw.py::test_glfw_canvas_render - assert 5 == 3
FAILED tests/test_wgpu_native_compute_tex.py::test_compute_tex_1d_rgba16sint - wgpu._classes.GPUValidationError: Validation Error
FAILED tests/test_wgpu_native_compute_tex.py::test_compute_tex_2d_rgba16sint - wgpu._classes.GPUValidationError: Validation Error
FAILED tests/test_wgpu_native_compute_tex.py::test_compute_tex_3d_rgba8uint - AssertionError: assert False
FAILED tests/test_wgpu_native_compute_tex.py::test_compute_tex_3d_rgba16sint - wgpu._classes.GPUValidationError: Validation Error
FAILED tests/test_wgpu_native_compute_tex.py::test_compute_tex_3d_r32sint - AssertionError: assert False
FAILED tests/test_wgpu_native_compute_tex.py::test_compute_tex_3d_r32float - AssertionError: assert False
FAILED tests/test_wgpu_native_render.py::test_render_orange_square_depth16unorm - wgpu._classes.GPUValidationError: Validation Error
FAILED tests/test_wgpu_native_render_tex.py::test_render_textured_square_rgba16sint - wgpu._classes.GPUValidationError: Validation Error
FAILED tests/test_wgpu_native_render_tex.py::test_render_textured_square_rgba32float - assert False
FAILED tests/test_wgpu_native_render_tex.py::test_render_textured_square_rg32float - assert False
======================= 11 failed, 109 passed in 21.26s ========================

@dskkato dskkato changed the title Raspberry PI 4B setup log Raspberry Pi 4B setup log Dec 1, 2023
@dskkato
Copy link
Contributor Author

dskkato commented Dec 1, 2023

For Wayland, it may be knowe issues. See pygfx/rendercanvas#36 for example.

@dskkato
Copy link
Contributor Author

dskkato commented Dec 4, 2023

I believe all that's left is (as mentioned elsewhare) to wait for the release on CI, so I will close this issue. There is still the pending task of building for armv7, it seems like it would be quite labor-intensive, involving preparations for armv7 container image (manylinux or Raspberry Pi base).

@dskkato dskkato closed this as completed Dec 4, 2023
@almarklein
Copy link
Member

Thanks for this!

It looks like the hardware of the Pi is just not good enough to meet the requirements to be wgpu standard compliant. What it does then is move to "downlevel", which is a set of easier requirements. Most test failures seem to be related to unsupported texture formats (or no filtering supported for certain textures).

I'm curious to see how well pygfx still runs on it, but we can try that another day.

There is still the pending task of building for armv7,

I think what we have now is probably enough for now.

@dskkato
Copy link
Contributor Author

dskkato commented Dec 7, 2023

Here is test logs running on Raspberry Pi 4B. I have no knowledge of the pygfx test cases and have not checked the logs.

Test logs


Short summaries

Vulkan backend

=========================== short test summary info ============================
FAILED examples/tests/test_examples.py::test_examples_run[offscreen] - TypeEr...
FAILED tests/renderers/test_reactivity.py::test_reactivity_mesh3 - wgpu._clas...
====== 2 failed, 278 passed, 21 skipped, 3 warnings in 743.31s (0:12:23) =======

OpenGL backend

=========================== short test summary info ============================
FAILED examples/tests/test_examples.py::test_examples_run[offscreen] - TypeEr...
FAILED tests/renderers/test_reactivity.py::test_reactivity_mesh1 - wgpu._clas...
FAILED tests/renderers/test_reactivity.py::test_reactivity_mesh2 - wgpu._clas...
FAILED tests/renderers/test_reactivity.py::test_reactivity_mesh3 - wgpu._clas...
FAILED tests/renderers/test_reactivity.py::test_change_blend_mode - wgpu._cla...
FAILED tests/renderers/test_reactivity.py::test_two_renders_with_same_blend_modes
FAILED tests/renderers/test_reactivity.py::test_two_renders_with_different_blend_modes
====== 7 failed, 273 passed, 21 skipped, 3 warnings in 715.57s (0:11:55) =======

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants