Report #494 validation
Attested, locked device valid
- GPU
- Adreno (TM) 613
- Driver
- Qualcomm Technologies Inc. Adreno Vulkan Driver Driver Build: a63fb93269, I16b8254a37, 1724729505 Date: 08/27/24 Compiler Version: EV031.36.08.30 Driver Branch:
- Device
- Xiaomi 23076RN4BI
- Chip
- SM4450
- CPU
- 6 x 1.96 GHz + 2 x 2.21 GHz, arm64-v8a
- Memory
- 5.3 GB
- Reported as
- Xiaomi / 23076RN4BI
- Received
- Android
- 15
Harness checks (1)
pass harness.baseline_draw
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| drawn half | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
Core checks (21)
pass core.readback_same_command_buffer
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| drawn half | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
pass push.max_combined_image_samplers
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| combined image samplers pushed in one set (the driver's stated limit) | , | 32 | pass | |
| bytes changed in memory next to the driver's allocations | , | 0 | pass | |
| drawn half: the pushed texture | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
pass core.resubmit_command_buffer
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| first submit: drawn half | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| second submit of the same command buffer: drawn half | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| second submit of the same command buffer: cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
pass core.compute_udiv
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| 703787787 / 47721859 | , | [14] | [14] | pass |
| 703787787 % 47721859 | , | [35681761] | [35681761] | pass |
| 4294967295 / 2147483649 | , | [1] | [1] | pass |
| 4294967295 % 2147483649 | , | [2147483646] | [2147483646] | pass |
| 4294967295 / 3 | , | [1431655765] | [1431655765] | pass |
| 4294967295 % 3 | , | [0] | [0] | pass |
| 4000000000 / 3 | , | [1333333333] | [1333333333] | pass |
| 4000000000 % 3 | , | [1] | [1] | pass |
| 2147483648 / 65537 | , | [32767] | [32767] | pass |
| 2147483648 % 65537 | , | [32769] | [32769] | pass |
| 2147483647 / 46341 | , | [46340] | [46340] | pass |
| 2147483647 % 46341 | , | [41707] | [41707] | pass |
| 1000000007 / 31607 | , | [31638] | [31638] | pass |
| 1000000007 % 31607 | , | [17741] | [17741] | pass |
| 16777217 / 4097 | , | [4095] | [4095] | pass |
| 16777217 % 4097 | , | [2] | [2] | pass |
| 16777216 / 4096 | , | [4096] | [4096] | pass |
| 16777216 % 4096 | , | [0] | [0] | pass |
| 4294967295 / 4294967295 | , | [1] | [1] | pass |
| 4294967295 % 4294967295 | , | [0] | [0] | pass |
| 3000000000 / 1500000001 | , | [1] | [1] | pass |
| 3000000000 % 1500000001 | , | [1499999999] | [1499999999] | pass |
| 123456789 / 10007 | , | [12337] | [12337] | pass |
| 123456789 % 10007 | , | [430] | [430] | pass |
| 4294967294 / 2 | , | [2147483647] | [2147483647] | pass |
| 4294967294 % 2 | , | [0] | [0] | pass |
| 65536 / 65537 | , | [0] | [0] | pass |
| 65536 % 65537 | , | [65536] | [65536] | pass |
| 99999999 / 4294967295 | , | [0] | [0] | pass |
| 99999999 % 4294967295 | , | [99999999] | [99999999] | pass |
| 1 / 1 | , | [1] | [1] | pass |
| 1 % 1 | , | [0] | [0] | pass |
pass core.texel_fetch_beside_ubo
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| left half: texel (1, 0) | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| right half: texel (0, 1) | 48,32 | [0, 0, 255, 255] | [0, 0, 255, 255] | pass |
pass push.max_uniform_buffers
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| uniform buffers pushed in one set (the driver's stated limit) | , | 32 | pass | |
| bytes changed in memory next to the driver's allocations | , | 0 | pass | |
| drawn half: element 5 of the pushed buffer | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
pass limit.uniform_buffer_range
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| bytes in one uniform buffer binding (the driver's stated limit) | , | 65536 | pass | |
| bytes changed in memory next to the driver's allocations | , | 0 | pass | |
| drawn half: element 127 of the block | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
pass limit.dynamic_uniform_buffers
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| dynamic uniform buffers in one set, bound with as many offsets (the driver's stated limit) | , | 32 | pass | |
| bytes changed in memory next to the driver's allocations | , | 0 | pass | |
| drawn half: the block the dynamic offset selects | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
pass stress.multi_draw_indirect_large
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| draws in one vkCmdDrawIndirect call (capped by this check, below the stated limit) | , | 16384 | pass | |
| drawn half | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
pass stress.compute_after_render
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| wrong answers in 3200 divisions over 200 rounds | , | [0] | [0] | pass |
| the last render pass: drawn half | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
pass stress.submit_memory
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| KiB of memory gained over 4000 submits (limit 16384) | , | 0 | pass | |
| the last submit: drawn half | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
fail core.copy_wide_row_length
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| first copied row (the last green row) | 16,0 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| second copied row, 4,210,688 bytes later (the first black row) | 16,1 | [0, 0, 0, 255] | [127, 127, 127, 127] | fail |
pass core.mediump_mul_extended
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| low half of 255 * 3 | , | [765] | [765] | pass |
| low half of 242 * 19 | , | [4598] | [4598] | pass |
| low half of 229 * 35 | , | [8015] | [8015] | pass |
| low half of 216 * 51 | , | [11016] | [11016] | pass |
| low half of 203 * 67 | , | [13601] | [13601] | pass |
| low half of 190 * 83 | , | [15770] | [15770] | pass |
| low half of 177 * 99 | , | [17523] | [17523] | pass |
| low half of 164 * 115 | , | [18860] | [18860] | pass |
| low half of 151 * 131 | , | [19781] | [19781] | pass |
| low half of 138 * 147 | , | [20286] | [20286] | pass |
| low half of 125 * 163 | , | [20375] | [20375] | pass |
| low half of 112 * 179 | , | [20048] | [20048] | pass |
| low half of 99 * 195 | , | [19305] | [19305] | pass |
| low half of 86 * 211 | , | [18146] | [18146] | pass |
| low half of 73 * 227 | , | [16571] | [16571] | pass |
| low half of 60 * 243 | , | [14580] | [14580] | pass |
| high half of the first product | , | [0] | [0] | pass |
pass core.msaa_resolve
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| resolved image: drawn half | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| resolved image: cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
pass limit.color_attachments
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| colour attachments in one render pass (the driver's stated limit) | , | 8 | pass | |
| bytes changed in memory next to the driver's allocations | , | 0 | pass | |
| first attachment: drawn half | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| first attachment: cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
pass limit.vertex_input
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| vertex buffer bindings in one pipeline, bound in one call (the driver's stated limit) | , | 16 | pass | |
| vertex attributes in one pipeline (the driver's stated limit) | , | 16 | pass | |
| bytes changed in memory next to the driver's allocations | , | 0 | pass | |
| drawn half | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
pass limit.push_constants_size
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| push constant bytes pushed in one call (the driver's stated limit) | , | 128 | pass | |
| bytes changed in memory next to the driver's allocations | , | 0 | pass | |
| drawn half: the colour in the first 16 bytes | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
pass limit.per_stage_samplers
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| combined image samplers in one descriptor set, bound and drawn with (capped by this check, below the stated limit) | , | 4096 | pass | |
| bytes changed in memory next to the driver's allocations | , | 0 | pass | |
| drawn half: the texture in element 0 | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
pass limit.bound_descriptor_sets
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| descriptor sets bound in one call (the driver's stated limit) | , | 4 | pass | |
| bytes changed in memory next to the driver's allocations | , | 0 | pass | |
| drawn half: the texture in set 0 | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
pass stress.pipeline_cache_threads
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| every vkCreateGraphicsPipelines call returned VK_SUCCESS | , | 0 | pass | |
| pipelines asked for in 8 seconds, at least one from each thread | , | 1024 | pass | |
| pipelines built, the same number | , | 1024 | pass | |
| every save made while compiling returned VK_SUCCESS or VK_INCOMPLETE | , | 0 | pass | |
| saves made while compiling | , | 476 | pass | |
| bytes a save reported beyond the buffer size it was given | , | 0 | pass | |
| bytes a save wrote past the end of the buffer it was given | , | 0 | pass | |
| final save size in bytes holds a header | , | 1256790 | pass | |
| header names this device | , | 32 | pass | |
| drawn half, after every pipeline drew it | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
pass stress.pipeline_threads_no_cache
| Check | Pixel | Expected | Got | Match |
|---|---|---|---|---|
| every vkCreateGraphicsPipelines call returned VK_SUCCESS | , | 0 | pass | |
| pipelines asked for in 8 seconds, at least one from each thread | , | 1024 | pass | |
| pipelines built, the same number | , | 1024 | pass | |
| drawn half, after every pipeline drew it | 16,32 | [0, 255, 0, 255] | [0, 255, 0, 255] | pass |
| cleared half | 48,32 | [0, 0, 0, 255] | [0, 0, 0, 255] | pass |
Feature results
VkPhysicalDeviceFeatures (8 tested)
geometryShader passtessellationShader passmultiDrawIndirect passdrawIndirectFirstInstance passtextureCompressionETC2 passtextureCompressionASTC_LDR passtextureCompressionBC passocclusionQueryPrecise pass
VK_EXT_custom_border_color (1 tested)
customBorderColors pass
VK_EXT_robustness2 (2 tested)
robustBufferAccess2 passrobustImageAccess2 pass
Features that were unsupported or had no check are not listed here.