Quick answer: Vulkan validation reporting storage image format mismatch on compute dispatch? Image format must match the shader's qualifier - use VK_FORMAT_R32_UINT for atomic ops, not generic R8.

Compute shader uses imageAtomicAdd on a R8_UNORM image. Validation: format does not support atomic ops.

Match format to op

Atomic ops require R32_UINT or R32_SINT. Storage images that need atomics can't be R8 regardless of how little range you actually use.

Specify format in shader

layout(r32ui, binding=0) uniform uimage2D tex;

Format qualifier makes the requirement explicit and the validator can check it earlier.

Validate with VkFormatProperties

vkGetPhysicalDeviceFormatProperties(...)

Check optimalTilingFeatures for VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT before assuming the format supports your op.

“Storage image formats are not freely choosable. Capability checks come first.”

Build a format-features dump tool. Run on each driver/GPU combo; you'll catch mobile-specific format gaps early.