Here's a negative result around compressing and caching ASTC parameters to reduce transfer overhead.
Taking an Adreno 650 as our reference:
- GPU - 1.2 TFlops (1200 GFlops)
- CPU SIMD int8 - 18 GFlops
| [REQUIRED] depthBiasClamp / CORE10 (feature) | |
| FL=9.0 - Required for D3D9 and D3D11. Allows clamping the depth bias value. | |
| Qcom Turnip | |
| + unsupported (0/53): [] | |
| + supported (53/53): ['23.0-26.708 (52/52)'] | |
| Qcom Proprietary | |
| + unsupported (0/163): [] | |
| + supported (163/163): ['512.502-512.826 (162/162)'] | |
| Mali Proprietary | |
| + unsupported (0/67): [] |
| CreateFramebuffer | |
| in: device: VkDevice (handle) = 0xb4000075a4e69010 | |
| in: pCreateInfo: VkFramebufferCreateInfo* | |
| .flags: VkFramebufferCreateFlags = 0x0 | |
| .renderPass: VkRenderPass (handle) = 0xb400007454e8d0d0 | |
| .attachmentCount: uint32_t = 0x1 | |
| .pAttachments[0]: VkImageView* = 0xb40000746501b800 | |
| .width: uint32_t = 0x500 | |
| .height: uint32_t = 0x2d0 | |
| .layers: uint32_t = 0x1 |
From AI Studio analysis of https://github.com/google/angle/blob/6a04a50f98cac71b25464d10289ce7a013841caf/src/libANGLE/renderer/vulkan/vk_renderer.cpp#L4879
These workarounds apply to GPUs designed by ARM (Mali), found in chipsets like Samsung Exynos, Google Tensor, and MediaTek Dimensity.
| Feature / Workaround | mFeatures Flag |
Condition / Driver Version | Reason & Impact |
|---|---|---|---|
| Protected Memory Restriction | supportsProtectedMemory |
Blocked if: isARM && !pipelineProtectedAccess |
Bug: On older ARM platforms, enabling VK_KHR_protected_memory causes excessive, unnecessary load/store unit activity. Workaround: Only enabled on ARM if the newer VK_EXT_pipeline_protected_access extension is also present, indicating a fixed driver. (b/208458772) |
| Mixed Load Op Restriction | disallowMixedDepthStencilLoadOpNoneAndLoad |
Enabled if: isARM && driverVersion < r38.1.0 |
Bug: ARM drivers older than r38p1 are bug |
| [REQUIRED] robustBufferAccess / CORE10 (feature) | |
| FL=9.1 - Always enabled if supported by Vulkan. Used for robustness and constant buffer range checks. | |
| ImgTec | |
| + unsupported (0/42): [] | |
| + supported (42/42): ['0.1017-139.3 (41/41)'] | |
| Mali Proprietary | |
| + unsupported (0/66): [] | |
| + supported (66/66): ['25.1-50.0 (65/65)'] | |
| Qcom Proprietary | |
| + unsupported (0/157): [] |
| [ | |
| { | |
| "name": "robustBufferAccess", | |
| "type": "feature", | |
| "extension": "CORE10", | |
| "required": true, | |
| "feature_level": "9.1", | |
| "notes": "Always enabled if supported by Vulkan. Used for robustness and constant buffer range checks.", | |
| "supported_driver_versions": { | |
| "Qcom Proprietary": [ |
| diff --git a/app/build.gradle b/app/build.gradle | |
| index f0f10e9..0abcde4 100644 | |
| --- a/app/build.gradle | |
| +++ b/app/build.gradle | |
| @@ -21,18 +21,18 @@ plugins { | |
| tasks.register("prepareKotlinBuildScriptModel"){} | |
| android { | |
| - namespace 'com.winlator' | |
| + namespace 'com.winlator.cmod' |
| #include <string.h> | |
| #include <jni.h> | |
| #include <vulkan/vulkan.h> | |
| #include <dlfcn.h> | |
| #include <android/log.h> | |
| #include <stdio.h> | |
| #include <__algorithm/find_if.h> | |
| #include <assert.h> | |
| #include <android/log.h> | |
| #include <iostream> |
| add_library(${CMAKE_PROJECT_NAME} SHARED | |
| # List C/C++ source files with relative paths to this CMakeLists.txt. | |
| dummyvk.cpp) | |
| # Specifies libraries CMake should link to your target library. You | |
| # can link libraries from various origins, such as libraries defined in this | |
| # build script, prebuilt third-party libraries, or Android system libraries. | |
| target_link_libraries(${CMAKE_PROJECT_NAME} | |
| # List libraries link to the target library | |
| android |
| #!/bin/bash | |
| PPID1=$(ps -o ppid= "$$" | tr -d ' ') | |
| PPID2=$(ps -o ppid= "$PPID1" | tr -d ' ') | |
| PARENT=$(ps -p "$PPID2" -o comm=) | |
| if [ -z "$1" ]; then | |
| if [ "$PARENT" != "script" ] ; then | |
| export HISTORY_FILE=$(mktemp) | |
| echo "Run with history ($HISTORY_FILE), don't forget to ctrl+D" |