turnip_mrpurple_T23-toasted vs Qualcomm Technologies Inc. Adreno Vulkan Driver
On Adreno (TM) 725 (motorola edge 30 ultra, OnePlus 15, POCO F5, Samsung Galaxy Z Fold4, Vivo iQOO Neo7 Pro, Xiaomi 12T Pro, Xiaomi 23013PC75G, Xiaomi 23049PCD8I). The first driver named is compared against the second, which is the baseline.
StockQualcomm Technologies Inc. Adreno Vulkan Driver
vsCustomturnip_mrpurple_T23-toasted
Graphics system version (Vulkan)1.1.128 to 1.4.335
Optional features (extensions)90 to 156+75 -9
Features that pass their check (validated)35 to 6632 pass only on turnip_mrpurple_T23-toasted 1 pass only on Qualcomm Technologies Inc. Adreno Vulkan Driver
Speed test scenes (benchmark)no shared scenes
Games each driver could run (an estimate from its feature list): green likely, yellow maybe, orange limited, red no
StockDX92002+DX102006+DX112009+DX122015+Switch
CustomDX92002+DX102006+DX112009+DX122015+Switch
Qualcomm Technologies Inc. Adreno Vulkan Driver details turnip_mrpurple_T23-toasted details
Feature checks that differ (63)
| Feature | Stock | Custom | Change |
|---|---|---|---|
| core.compute_udiv | pass | fail | lost |
| borderColorSwizzle | unsupported | pass | gained |
| colorWriteEnable | unsupported | pass | gained |
| depthClipControl | unsupported | pass | gained |
| extendedDynamicState2 | unsupported | pass | gained |
| extendedDynamicState2LogicOp | unsupported | pass | gained |
| extendedDynamicState3ColorBlendEnable | unsupported | pass | gained |
| extendedDynamicState3ColorBlendEquation | unsupported | pass | gained |
| extendedDynamicState3ColorWriteMask | unsupported | pass | gained |
| extendedDynamicState3DepthClampEnable | unsupported | pass | gained |
| extendedDynamicState3LogicOpEnable | unsupported | pass | gained |
| extendedDynamicState3PolygonMode | unsupported | pass | gained |
| inlineUniformBlock | unsupported | pass | gained |
| vertexInputDynamicState | unsupported | pass | gained |
| depthClamp | untested | pass | gained |
| largePoints | untested | pass | gained |
| multiViewport | unsupported | pass | gained |
| compat.helper_loop_terminator | untested | pass | gained |
| core.blend_advertised_formats | untested | pass | gained |
| core.compute_big_stack | untested | pass | gained |
| core.host_coherent_readback | untested | pass | gained |
| core.mrt_partial_kill | untested | pass | gained |
| core.ubo_update_buffer | untested | pass | gained |
| core.ubo_written_after_record | untested | pass | gained |
| core.varying_subset | untested | pass | gained |
| mem.image_padding | untested | pass | gained |
| perf.fb_local_barrier_large_draws | untested | pass | gained |
| perf.fb_local_barrier_overdraw | untested | pass | gained |
| stage.geometry_max_output | untested | pass | gained |
| stage.geometry_point_size | untested | pass | gained |
| stress.scratch_per_batch | untested | pass | gained |
| stress.spill_helper_lanes | untested | pass | gained |
| sync.first_submit_clear_then_compute | untested | pass | gained |
| borderColorSwizzleFromImage | unsupported | untested | changed |
| extendedDynamicState2PatchControlPoints | unsupported | untested | changed |
| extendedDynamicState3AlphaToCoverageEnable | unsupported | untested | changed |
| extendedDynamicState3AlphaToOneEnable | unsupported | untested | changed |
| extendedDynamicState3ConservativeRasterizationMode | unsupported | untested | changed |
| extendedDynamicState3DepthClipEnable | unsupported | untested | changed |
| extendedDynamicState3DepthClipNegativeOneToOne | unsupported | untested | changed |
| extendedDynamicState3ExtraPrimitiveOverestimationSize | unsupported | untested | changed |
| extendedDynamicState3LineRasterizationMode | unsupported | untested | changed |
| extendedDynamicState3ProvokingVertexMode | unsupported | untested | changed |
| extendedDynamicState3RasterizationSamples | unsupported | untested | changed |
| extendedDynamicState3RasterizationStream | unsupported | untested | changed |
| extendedDynamicState3SampleLocationsEnable | unsupported | untested | changed |
| extendedDynamicState3SampleMask | unsupported | untested | changed |
| extendedDynamicState3TessellationDomainOrigin | unsupported | untested | changed |
| descriptorBindingInlineUniformBlockUpdateAfterBind | unsupported | untested | changed |
| shaderFloat64 | unsupported | untested | changed |
| shaderInt64 | unsupported | untested | changed |
| shaderResourceMinLod | unsupported | untested | changed |
| shaderResourceResidency | unsupported | untested | changed |
| shaderTessellationAndGeometryPointSize | unsupported | untested | changed |
| sparseResidency16Samples | untested | unsupported | changed |
| sparseResidency2Samples | untested | unsupported | changed |
| sparseResidency4Samples | untested | unsupported | changed |
| sparseResidency8Samples | untested | unsupported | changed |
| sparseResidencyAliased | unsupported | untested | changed |
| sparseResidencyImage2D | untested | unsupported | changed |
| variableMultisampleRate | unsupported | untested | changed |
| compat.nested_map | untested | crash | changed |
| stress.many_command_buffers_one_submit | untested | fail | changed |
Speed test scenes (benchmark)
The two drivers were not measured on the same set of device models. Frame times from different devices do not compare drivers, so read these numbers with that in mind.
| Scene | Stock ms | Custom ms | Difference | Starts | GPU clock, MHz | Picture vs stock |
|---|---|---|---|---|---|---|
| compute_nbody | 11.87 | n/a | only one side | 3 of 3 vs 0 of 3 | ? vs ? | not checked |
| hdr_2160p | 49.98 | n/a | only one side | 3 of 3 vs 3 of 3 | ? vs ? | no large difference no small difference |
| oit_linked_lists | 32.28 | n/a | only one side | 3 of 3 vs 3 of 3 | ? vs ? | no large difference no small difference |
| pipeline_barriers | 11.23 | n/a | only one side | 3 of 3 vs 3 of 3 | ? vs ? | no large difference differs in 1570 small areas |
| pipeline_barriers_2160p | n/a | n/a | only one side | ? vs 3 of 3 | ? vs ? | not checked |
| subpasses | 15.26 | n/a | only one side | 3 of 3 vs 3 of 3 | ? vs ? | not checked |
| subpasses_2160p | n/a | n/a | only one side | ? vs 3 of 3 | ? vs ? | not checked |
Technical differences (Vulkan)
Extensions only in turnip_mrpurple_T23-toasted (75)
- VK_AMD_buffer_marker
- VK_ARM_rasterization_order_attachment_access
- VK_EXT_4444_formats
- VK_EXT_attachment_feedback_loop_dynamic_state
- VK_EXT_attachment_feedback_loop_layout
- VK_EXT_border_color_swizzle
- VK_EXT_color_write_enable
- VK_EXT_conditional_rendering
- VK_EXT_conservative_rasterization
- VK_EXT_custom_resolve
- VK_EXT_depth_clamp_zero_one
- VK_EXT_depth_clip_control
- VK_EXT_depth_clip_enable
- VK_EXT_descriptor_buffer
- VK_EXT_device_address_binding_report
- VK_EXT_dynamic_rendering_unused_attachments
- VK_EXT_extended_dynamic_state2
- VK_EXT_extended_dynamic_state3
- VK_EXT_external_memory_dma_buf
- VK_EXT_fragment_density_map_offset
- VK_EXT_global_priority_query
- VK_EXT_graphics_pipeline_library
- VK_EXT_host_image_copy
- VK_EXT_image_2d_view_of_3d
- VK_EXT_image_drm_format_modifier
- VK_EXT_image_view_min_lod
- VK_EXT_inline_uniform_block
- VK_EXT_legacy_dithering
- VK_EXT_legacy_vertex_attributes
- VK_EXT_load_store_op_none
- VK_EXT_map_memory_placed
- VK_EXT_memory_budget
- VK_EXT_multi_draw
- VK_EXT_multisampled_render_to_single_sampled
- VK_EXT_mutable_descriptor_type
- VK_EXT_nested_command_buffer
- VK_EXT_non_seamless_cube_map
- VK_EXT_primitives_generated_query
- VK_EXT_rasterization_order_attachment_access
- VK_EXT_shader_module_identifier
- VK_EXT_shader_replicated_composites
- VK_EXT_shader_viewport_index_layer
- VK_EXT_tooling_info
- VK_EXT_vertex_input_dynamic_state
- VK_EXT_zero_initialize_device_memory
- VK_GOOGLE_decorate_string
- VK_GOOGLE_hlsl_functionality1
- VK_KHR_compute_shader_derivatives
- VK_KHR_deferred_host_operations
- VK_KHR_dynamic_rendering
- VK_KHR_dynamic_rendering_local_read
- VK_KHR_format_feature_flags2
- VK_KHR_global_priority
- VK_KHR_index_type_uint8
- VK_KHR_line_rasterization
- VK_KHR_load_store_op_none
- VK_KHR_maintenance4
- VK_KHR_maintenance5
- VK_KHR_maintenance6
- VK_KHR_maintenance7
- VK_KHR_map_memory2
- VK_KHR_pipeline_library
- VK_KHR_shader_clock
- VK_KHR_shader_expect_assume
- VK_KHR_shader_float_controls2
- VK_KHR_shader_integer_dot_product
- VK_KHR_shader_relaxed_extended_instruction
- VK_KHR_shader_subgroup_rotate
- VK_KHR_shader_subgroup_uniform_control_flow
- VK_KHR_vertex_attribute_divisor
- VK_KHR_zero_initialize_workgroup_memory
- VK_NV_compute_shader_derivatives
- VK_QCOM_fragment_density_map_offset
- VK_VALVE_fragment_density_map_layered
- VK_VALVE_mutable_descriptor_type
Extensions only in Qualcomm Technologies Inc. Adreno Vulkan Driver (9)
- VK_EXT_astc_decode_mode
- VK_EXT_blend_operation_advanced
- VK_EXT_device_memory_report
- VK_EXT_fragment_density_map2
- VK_EXT_texture_compression_astc_hdr
- VK_KHR_shared_presentable_image
- VK_QCOM_render_pass_store_ops
- VK_QCOM_render_pass_transform
- VK_QCOM_rotated_copy_commands
Core features that differ (87)
| multiview | unsupported to pass |
| multiviewGeometryShader | unsupported to pass |
| multiviewTessellationShader | unsupported to pass |
| samplerYcbcrConversion | unsupported to pass |
| shaderDrawParameters | unsupported to pass |
| storageBuffer16BitAccess | unsupported to pass |
| storageInputOutput16 | unsupported to pass |
| storagePushConstant16 | unsupported to pass |
| uniformAndStorageBuffer16BitAccess | unsupported to pass |
| variablePointers | unsupported to pass |
| variablePointersStorageBuffer | unsupported to pass |
| bufferDeviceAddress | unsupported to pass |
| bufferDeviceAddressCaptureReplay | unsupported to pass |
| descriptorBindingPartiallyBound | unsupported to pass |
| descriptorBindingSampledImageUpdateAfterBind | unsupported to pass |
| descriptorBindingStorageBufferUpdateAfterBind | unsupported to pass |
| descriptorBindingStorageImageUpdateAfterBind | unsupported to pass |
| descriptorBindingStorageTexelBufferUpdateAfterBind | unsupported to pass |
| descriptorBindingUniformBufferUpdateAfterBind | unsupported to pass |
| descriptorBindingUniformTexelBufferUpdateAfterBind | unsupported to pass |
| descriptorBindingUpdateUnusedWhilePending | unsupported to pass |
| descriptorBindingVariableDescriptorCount | unsupported to pass |
| descriptorIndexing | unsupported to pass |
| drawIndirectCount | unsupported to pass |
| hostQueryReset | unsupported to pass |
| imagelessFramebuffer | unsupported to pass |
| runtimeDescriptorArray | unsupported to pass |
| samplerFilterMinmax | unsupported to pass |
| samplerMirrorClampToEdge | unsupported to pass |
| scalarBlockLayout | unsupported to pass |
| separateDepthStencilLayouts | unsupported to pass |
| shaderFloat16 | unsupported to pass |
| shaderInputAttachmentArrayDynamicIndexing | unsupported to pass |
| shaderInputAttachmentArrayNonUniformIndexing | unsupported to pass |
| shaderInt8 | unsupported to pass |
| shaderOutputLayer | unsupported to pass |
| shaderOutputViewportIndex | unsupported to pass |
| shaderSampledImageArrayNonUniformIndexing | unsupported to pass |
| shaderSharedInt64Atomics | unsupported to pass |
| shaderStorageBufferArrayNonUniformIndexing | unsupported to pass |
| shaderStorageImageArrayNonUniformIndexing | unsupported to pass |
| shaderStorageTexelBufferArrayDynamicIndexing | unsupported to pass |
| shaderStorageTexelBufferArrayNonUniformIndexing | unsupported to pass |
| shaderSubgroupExtendedTypes | unsupported to pass |
| shaderUniformBufferArrayNonUniformIndexing | unsupported to pass |
| shaderUniformTexelBufferArrayDynamicIndexing | unsupported to pass |
| shaderUniformTexelBufferArrayNonUniformIndexing | unsupported to pass |
| storageBuffer8BitAccess | unsupported to pass |
| storagePushConstant8 | unsupported to pass |
| subgroupBroadcastDynamicId | unsupported to pass |
| timelineSemaphore | unsupported to pass |
| uniformAndStorageBuffer8BitAccess | unsupported to pass |
| uniformBufferStandardLayout | unsupported to pass |
| vulkanMemoryModel | unsupported to pass |
| vulkanMemoryModelAvailabilityVisibilityChains | unsupported to pass |
| vulkanMemoryModelDeviceScope | unsupported to pass |
| computeFullSubgroups | unsupported to pass |
| descriptorBindingInlineUniformBlockUpdateAfterBind | unsupported to pass |
| dynamicRendering | unsupported to pass |
| inlineUniformBlock | unsupported to pass |
| maintenance4 | unsupported to pass |
| pipelineCreationCacheControl | unsupported to pass |
| privateData | unsupported to pass |
| robustImageAccess | unsupported to pass |
| shaderDemoteToHelperInvocation | unsupported to pass |
| shaderIntegerDotProduct | unsupported to pass |
| shaderTerminateInvocation | unsupported to pass |
| shaderZeroInitializeWorkgroupMemory | unsupported to pass |
| subgroupSizeControl | unsupported to pass |
| synchronization2 | unsupported to pass |
| textureCompressionASTC_HDR | unsupported to pass |
| bresenhamLines | unsupported to pass |
| dynamicRenderingLocalRead | unsupported to pass |
| globalPriorityQuery | unsupported to pass |
| hostImageCopy | unsupported to pass |
| indexTypeUint8 | unsupported to pass |
| maintenance5 | unsupported to pass |
| maintenance6 | unsupported to pass |
| pipelineRobustness | unsupported to pass |
| pushDescriptor | unsupported to pass |
| rectangularLines | unsupported to pass |
| shaderExpectAssume | unsupported to pass |
| shaderFloatControls2 | unsupported to pass |
| shaderSubgroupRotate | unsupported to pass |
| shaderSubgroupRotateClustered | unsupported to pass |
| vertexAttributeInstanceRateDivisor | unsupported to pass |
| vertexAttributeInstanceRateZeroDivisor | unsupported to pass |
Limits that differ (34)
| Limit | Stock | Custom |
|---|---|---|
| maxMemoryAllocationCount | 4096 | 4294967295 |
| maxSamplerAllocationCount | 4000 | 65536 |
| bufferImageGranularity | 1 | 64 |
| sparseAddressSpaceSize | 562949953421311 | 0 |
| maxPerStageDescriptorSamplers | 524288 | 16777216 |
| maxPerStageDescriptorUniformBuffers | 524288 | 16777216 |
| maxPerStageDescriptorStorageBuffers | 524288 | 16777216 |
| maxPerStageDescriptorSampledImages | 524288 | 16777216 |
| maxPerStageDescriptorStorageImages | 524288 | 16777216 |
| maxPerStageResources | 1572864 | 16777216 |
| maxDescriptorSetSamplers | 524288 | 16777216 |
| maxDescriptorSetUniformBuffers | 524288 | 16777216 |
| maxDescriptorSetUniformBuffersDynamic | 32 | 16 |
| maxDescriptorSetStorageBuffers | 524288 | 16777216 |
| maxDescriptorSetStorageBuffersDynamic | 16 | 8 |
| maxDescriptorSetSampledImages | 524288 | 16777216 |
| maxDescriptorSetStorageImages | 524288 | 16777216 |
| maxVertexInputAttributeOffset | 4096 | 4095 |
| maxGeometryInputComponents | 128 | 64 |
| maxGeometryOutputVertices | 1024 | 256 |
| maxGeometryTotalOutputComponents | 131072 | 1024 |
| maxFragmentInputComponents | 112 | 124 |
| maxFragmentCombinedOutputResources | 72 | 33554440 |
| maxComputeWorkGroupInvocations | 1024 | 2048 |
| maxComputeWorkGroupSize | 1024, 1024, 64 | 1024, 1024, 1024 |
| maxViewports | 1 | 16 |
| minMemoryMapAlignment | 64 | 4096 |
| minStorageBufferOffsetAlignment | 64 | 4 |
| maxFramebufferLayers | 2048 | 1024 |
| timestampPeriod | 52.0833 | 33.1126 |
| discreteQueuePriorities | 3 | 2 |
| optimalBufferCopyOffsetAlignment | 64 | 128 |
| optimalBufferCopyRowPitchAlignment | 64 | 128 |
| nonCoherentAtomSize | 1 | 64 |
Formats supported by only one driver (34 gained, 15 lost)
- A1B5G5R5_UNORM_PACK16
- A2B10G10R10_SSCALED_PACK32
- A2B10G10R10_USCALED_PACK32
- A2R10G10B10_SSCALED_PACK32
- A2R10G10B10_USCALED_PACK32
- A4B4G4R4_UNORM_PACK16
- A4R4G4B4_UNORM_PACK16
- A8B8G8R8_SSCALED_PACK32
- A8B8G8R8_USCALED_PACK32
- A8_UNORM
- B8G8R8A8_SINT
- B8G8R8A8_SNORM
- B8G8R8A8_SSCALED
- B8G8R8A8_UINT
- B8G8R8A8_USCALED
- B8G8R8_SINT
- B8G8R8_SNORM
- B8G8R8_UINT
- R16G16B16A16_SSCALED
- R16G16B16A16_USCALED
- R16G16B16_SSCALED
- R16G16B16_USCALED
- R16G16_SSCALED
- R16G16_USCALED
- R16_SSCALED
- R16_USCALED
- R8G8B8A8_SSCALED
- R8G8B8A8_USCALED
- R8G8B8_SSCALED
- R8G8B8_USCALED
- R8G8_SSCALED
- R8G8_USCALED
- R8_SSCALED
- R8_USCALED
- ASTC_10x10_SFLOAT_BLOCK
- ASTC_10x5_SFLOAT_BLOCK
- ASTC_10x6_SFLOAT_BLOCK
- ASTC_10x8_SFLOAT_BLOCK
- ASTC_12x10_SFLOAT_BLOCK
- ASTC_12x12_SFLOAT_BLOCK
- ASTC_4x4_SFLOAT_BLOCK
- ASTC_5x4_SFLOAT_BLOCK
- ASTC_5x5_SFLOAT_BLOCK
- ASTC_6x5_SFLOAT_BLOCK
- ASTC_6x6_SFLOAT_BLOCK
- ASTC_8x5_SFLOAT_BLOCK
- ASTC_8x6_SFLOAT_BLOCK
- ASTC_8x8_SFLOAT_BLOCK
- G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16