GLES3 on GC7000L
I've been working on GLES3 for GC7000L. With my branch most of GLES3 works but it is just a bunch of hacks at the moment, some of which hurt performance. I'll be working on updating rnndb and making real patches. There are still some fails which shouldn't be happening (some I did debug, without finding a solution yet..)
Some links:
-
EVK SDCARD IMAGE:
- Based on what I use for development, debian based, easy to cross compile from debian
- debootstrap +
apt install nano iproute2 udev weston kmscube gdb
+ glmark/deqp + my mesa - Starts with telnet on ip 192.168.0.194 (can change with UART)
- Mesa source
- Kernel source * Not using new softpin patches * Display driver is Lucas's rebased driver, which is buggy (my HDMI monitor doesn't work in 4k video mode, but works in 1080p)
deqp GLES3 test results:
- Results
-
dEQP-GLES3.functional.*
minusdEQP-GLES3.functional.{fence_sync,negative_api,multisample}.*
- Pass: 42243 (95.0%) Fail: 1412 (3.2%) NotSupported: 580 (1.3%) Warning: 219 (0.5%) Total: 44454
Notable features I added:
- All render/texture formats (minus depth32f render target)
- All(?) GLES3 shader features
- All vertex formats
- UBOs
- Instanced rendering
- Transform feedback
Features which are missing:
- MRT: I partially reverse engineered it to implement rendering to 128bpp formats. This causes GLES3 tests relying on MRT to return a not supported error.
- MSAA: Didn't work on this at all, but disabled it from the driver so the tests return not supported instead of hanging the GPU and failing.
- Rendering to float depth: hardware doesn't support this
- textureSize/textureOffset: I partially implemented some of it but will remove it. see below
Features supported and not supported by the blob:
- ASTC (hardware doesn't support it, it is decompressed in software)
- r8_srgb format (not that anyone would use this, but the blob doesn't support it for unknown reasons)
- ... (I only checked texture tests)
GLES3 features which the GC7000L does not support (but the blob tries very hard to support everything regardless):
-
ARB_depth_buffer_float
: for sampling we can use a float texture format and implement the shadow sampler comparator in the shader (as the blob does), but filtering is wrong (for filters other than nearest). For rendering to float depth it looks like the blob renders to 24bpp depth and makes the conversion, but I did not try to implement that. - Mipmap filtering on shadow samplers - the blob just disables the mipmap filter and deqp gives quality warnings
- textureSize and textureOffset are not implemented in hardware. These are simple to fake when mipmaps aren't involved, but when they are we see a ~30 instruction sequence on the blob to implement texture offset which should be an extremely simple feature.
- ASTC - on mesa we support it with software decompression, the blob just doesn't support it
- ...